/* log - a generic logging facility in the spirit of log4j */
-/* Copyright (c) 2004-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2004-2018. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "xbt/sysdep.h"
#include "xbt/xbt_os_thread.h"
+#ifndef MIN
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#endif
+#ifndef MAX
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#endif
+
int xbt_log_no_loc = 0; /* if set to true (with --log=no_loc), file localization will be omitted (for tesh tests) */
static xbt_os_mutex_t log_cat_init_mutex = NULL;
-/** \addtogroup XBT_log
+/** @addtogroup XBT_log
*
* For more information, please refer to @ref outcomes_logs Section.
*/
log_cat_init_mutex = xbt_os_mutex_init();
}
-static void xbt_log_connect_categories(void)
-{
- /* Connect our log channels: that must be done manually under windows */
- /* Also permit that they are correctly listed by xbt_log_help_categories() */
-
- /* xbt */
- XBT_LOG_CONNECT(xbt);
- XBT_LOG_CONNECT(log);
- XBT_LOG_CONNECT(module);
- XBT_LOG_CONNECT(replay);
- XBT_LOG_CONNECT(xbt_cfg);
- XBT_LOG_CONNECT(xbt_dict);
- XBT_LOG_CONNECT(xbt_dict_cursor);
- XBT_LOG_CONNECT(xbt_dict_elm);
- XBT_LOG_CONNECT(xbt_dyn);
- XBT_LOG_CONNECT(xbt_ex);
- XBT_LOG_CONNECT(xbt_backtrace);
- XBT_LOG_CONNECT(xbt_exception);
- XBT_LOG_CONNECT(xbt_graph);
- XBT_LOG_CONNECT(xbt_heap);
- XBT_LOG_CONNECT(xbt_mallocator);
- XBT_LOG_CONNECT(xbt_memory_map);
- XBT_LOG_CONNECT(xbt_parmap);
- XBT_LOG_CONNECT(xbt_sync);
- XBT_LOG_CONNECT(xbt_sync_os);
-
-#ifdef simgrid_EXPORTS
- /* The following categories are only defined in libsimgrid */
-
- /* bindings */
-#if SIMGRID_HAVE_LUA
- XBT_LOG_CONNECT(lua);
- XBT_LOG_CONNECT(lua_host);
- XBT_LOG_CONNECT(lua_platf);
- XBT_LOG_CONNECT(lua_debug);
-#endif
-
- /* instr */
- XBT_LOG_CONNECT(instr);
- XBT_LOG_CONNECT(instr_api);
- XBT_LOG_CONNECT(instr_config);
- XBT_LOG_CONNECT(instr_msg);
- XBT_LOG_CONNECT(instr_msg_process);
- XBT_LOG_CONNECT(instr_paje_containers);
- XBT_LOG_CONNECT(instr_paje_header);
- XBT_LOG_CONNECT(instr_paje_trace);
- XBT_LOG_CONNECT(instr_paje_types);
- XBT_LOG_CONNECT(instr_paje_values);
- XBT_LOG_CONNECT(instr_resource);
- XBT_LOG_CONNECT(instr_routing);
- XBT_LOG_CONNECT(instr_surf);
-
- /* jedule */
-#if SIMGRID_HAVE_JEDULE
- XBT_LOG_CONNECT(jedule);
- XBT_LOG_CONNECT(jed_sd);
-#endif
-
- /* mc */
-#if SIMGRID_HAVE_MC
- XBT_LOG_CONNECT(mc);
- XBT_LOG_CONNECT(mc_checkpoint);
- XBT_LOG_CONNECT(mc_comm_determinism);
- XBT_LOG_CONNECT(mc_compare);
- XBT_LOG_CONNECT(mc_dwarf);
- XBT_LOG_CONNECT(mc_hash);
- XBT_LOG_CONNECT(mc_liveness);
- XBT_LOG_CONNECT(mc_memory);
- XBT_LOG_CONNECT(mc_page_snapshot);
- XBT_LOG_CONNECT(mc_request);
- XBT_LOG_CONNECT(mc_safety);
- XBT_LOG_CONNECT(mc_VisitedState);
- XBT_LOG_CONNECT(mc_client);
- XBT_LOG_CONNECT(mc_client_api);
- XBT_LOG_CONNECT(mc_comm_pattern);
- XBT_LOG_CONNECT(mc_process);
- XBT_LOG_CONNECT(mc_protocol);
- XBT_LOG_CONNECT(mc_Channel);
- XBT_LOG_CONNECT(mc_ModelChecker);
- XBT_LOG_CONNECT(mc_RegionSnaphot);
- XBT_LOG_CONNECT(mc_Session);
- XBT_LOG_CONNECT(mc_state);
-#endif
- XBT_LOG_CONNECT(mc_global);
- XBT_LOG_CONNECT(mc_config);
- XBT_LOG_CONNECT(mc_record);
-
- /* msg */
- XBT_LOG_CONNECT(msg);
- XBT_LOG_CONNECT(msg_action);
- XBT_LOG_CONNECT(msg_gos);
- XBT_LOG_CONNECT(msg_io);
- XBT_LOG_CONNECT(msg_kernel);
- XBT_LOG_CONNECT(msg_mailbox);
- XBT_LOG_CONNECT(msg_process);
- XBT_LOG_CONNECT(msg_synchro);
- XBT_LOG_CONNECT(msg_task);
- XBT_LOG_CONNECT(msg_vm);
-
- /* s4u */
- XBT_LOG_CONNECT(s4u);
- XBT_LOG_CONNECT(s4u_activity);
- XBT_LOG_CONNECT(s4u_actor);
- XBT_LOG_CONNECT(s4u_netzone);
- XBT_LOG_CONNECT(s4u_channel);
- XBT_LOG_CONNECT(s4u_comm);
- XBT_LOG_CONNECT(s4u_file);
- XBT_LOG_CONNECT(s4u_link);
- XBT_LOG_CONNECT(s4u_vm);
-
- /* sg */
- XBT_LOG_CONNECT(sg_host);
-
- /* simdag */
- XBT_LOG_CONNECT(sd);
- XBT_LOG_CONNECT(sd_daxparse);
-#if HAVE_GRAPHVIZ
- XBT_LOG_CONNECT(sd_dotparse);
-#endif
- XBT_LOG_CONNECT(sd_kernel);
- XBT_LOG_CONNECT(sd_task);
-
- /* simix */
- XBT_LOG_CONNECT(simix);
- XBT_LOG_CONNECT(simix_context);
- XBT_LOG_CONNECT(simix_deployment);
- XBT_LOG_CONNECT(simix_environment);
- XBT_LOG_CONNECT(simix_host);
- XBT_LOG_CONNECT(simix_io);
- XBT_LOG_CONNECT(simix_kernel);
- XBT_LOG_CONNECT(simix_mailbox);
- XBT_LOG_CONNECT(simix_network);
- XBT_LOG_CONNECT(simix_process);
- XBT_LOG_CONNECT(simix_popping);
- XBT_LOG_CONNECT(simix_synchro);
-
- /* smpi */
- /* SMPI categories are connected in smpi_global.c */
-
- /* surf */
- XBT_LOG_CONNECT(surf);
- XBT_LOG_CONNECT(surf_config);
- XBT_LOG_CONNECT(surf_cpu);
- XBT_LOG_CONNECT(surf_cpu_cas);
- XBT_LOG_CONNECT(surf_cpu_ti);
- XBT_LOG_CONNECT(surf_energy);
- XBT_LOG_CONNECT(surf_file);
- XBT_LOG_CONNECT(surf_kernel);
- XBT_LOG_CONNECT(surf_lagrange);
- XBT_LOG_CONNECT(surf_lagrange_dichotomy);
- XBT_LOG_CONNECT(surf_maxmin);
- XBT_LOG_CONNECT(surf_network);
-#if SIMGRID_HAVE_NS3
- XBT_LOG_CONNECT(ns3);
-#endif
- XBT_LOG_CONNECT(surf_parse);
- XBT_LOG_CONNECT(surf_plugin_load);
- XBT_LOG_CONNECT(surf_route);
- XBT_LOG_CONNECT(surf_routing_generic);
- XBT_LOG_CONNECT(surf_route_cluster);
- XBT_LOG_CONNECT(surf_route_cluster_torus);
- XBT_LOG_CONNECT(surf_route_cluster_dragonfly);
- XBT_LOG_CONNECT(surf_route_dijkstra);
- XBT_LOG_CONNECT(surf_route_fat_tree);
- XBT_LOG_CONNECT(surf_route_floyd);
- XBT_LOG_CONNECT(surf_route_full);
- XBT_LOG_CONNECT(surf_route_none);
- XBT_LOG_CONNECT(surf_route_vivaldi);
- XBT_LOG_CONNECT(surf_storage);
- XBT_LOG_CONNECT(surf_trace);
- XBT_LOG_CONNECT(surf_vm);
- XBT_LOG_CONNECT(surf_host);
-
-#endif /* simgrid_EXPORTS */
-}
-
static void xbt_log_help(void);
static void xbt_log_help_categories(void);
{
unsigned help_requested = 0; /* 1: logs; 2: categories */
int j = 1;
+ int parse_args = 1; // Stop parsing the parameters once we found '--'
/* Set logs and init log submodule */
for (int i = 1; i < *argc; i++) {
- if (!strncmp(argv[i], "--log=", strlen("--log="))) {
+ if (!strcmp("--", argv[i])) {
+ parse_args = 0;
+ argv[j++] = argv[i]; // Keep the '--' for sg_config
+ } else if (parse_args && !strncmp(argv[i], "--log=", strlen("--log="))) {
char* opt = strchr(argv[i], '=');
opt++;
xbt_log_control_set(opt);
XBT_DEBUG("Did apply '%s' as log setting", opt);
- } else if (!strcmp(argv[i], "--help-logs")) {
+ } else if (parse_args && !strcmp(argv[i], "--help-logs")) {
help_requested |= 1U;
- } else if (!strcmp(argv[i], "--help-log-categories")) {
+ } else if (parse_args && !strcmp(argv[i], "--help-log-categories")) {
help_requested |= 2U;
} else {
argv[j++] = argv[i];
}
/**
- * \ingroup XBT_log
- * \param control_string What to parse
+ * @ingroup XBT_log
+ * @param control_string What to parse
*
* Typically passed a command-line argument. The string has the syntax:
*
* ( [category] "." [keyword] ":" value (" ")... )...
*
- * where [category] is one the category names (see \ref XBT_log_cats for a complete list of the ones defined in the
+ * where [category] is one the category names (see @ref XBT_log_cats for a complete list of the ones defined in the
* SimGrid library) and keyword is one of the following:
*
* - thres: category's threshold priority. Possible values:
* - add or additivity: whether the logging actions must be passed to the parent category.
* Possible values: 0, 1, no, yes, on, off.
* Default value: yes.
- * - fmt: the format to use. See \ref log_use_conf_fmt for more information.
- * - app or appender: the appender to use. See \ref log_use_conf_app for more information.
+ * - fmt: the format to use. See @ref log_use_conf_fmt for more information.
+ * - app or appender: the appender to use. See @ref log_use_conf_app for more information.
*/
void xbt_log_control_set(const char *control_string)
{
"in 'l'etter)\n"
" -> %%L: line number where the log event was raised (LOG4J compatible)\n"
" -> %%M: function name (LOG4J compatible -- called method name here of course).\n"
- " Defined only when using gcc because there is no __FUNCTION__ elsewhere.\n"
+ " Defined only when using gcc because there is no __func__ elsewhere.\n"
"\n"
" -> %%b: full backtrace (Called %%throwable in LOG4J). Defined only under windows or when using the "
"GNU libc because\n"