/* log - a generic logging facility in the spirit of log4j */
-/* Copyright (c) 2004-2015. The SimGrid Team.
+/* Copyright (c) 2004-2017. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
e_xbt_log_priority_t thresh;
int additivity;
xbt_log_appender_t appender;
-} s_xbt_log_setting_t, *xbt_log_setting_t;
+} s_xbt_log_setting_t;
+
+typedef s_xbt_log_setting_t* xbt_log_setting_t;
static xbt_dynar_t xbt_log_settings = NULL;
XBT_LOG_CONNECT(log);
XBT_LOG_CONNECT(module);
XBT_LOG_CONNECT(replay);
- XBT_LOG_CONNECT(strbuff);
XBT_LOG_CONNECT(xbt_cfg);
XBT_LOG_CONNECT(xbt_dict);
XBT_LOG_CONNECT(xbt_dict_cursor);
XBT_LOG_CONNECT(xbt_ex);
XBT_LOG_CONNECT(xbt_backtrace);
XBT_LOG_CONNECT(xbt_exception);
- XBT_LOG_CONNECT(xbt_fifo);
XBT_LOG_CONNECT(xbt_graph);
XBT_LOG_CONNECT(xbt_heap);
- XBT_LOG_CONNECT(xbt_lib);
XBT_LOG_CONNECT(xbt_mallocator);
- XBT_LOG_CONNECT(xbt_matrix);
XBT_LOG_CONNECT(xbt_memory_map);
XBT_LOG_CONNECT(xbt_parmap);
XBT_LOG_CONNECT(xbt_sync);
/* The following categories are only defined in libsimgrid */
/* bindings */
-#if HAVE_LUA
+#if SIMGRID_HAVE_LUA
XBT_LOG_CONNECT(lua);
XBT_LOG_CONNECT(lua_host);
XBT_LOG_CONNECT(lua_platf);
XBT_LOG_CONNECT(instr_resource);
XBT_LOG_CONNECT(instr_routing);
XBT_LOG_CONNECT(instr_surf);
- XBT_LOG_CONNECT(instr_trace);
- XBT_LOG_CONNECT(instr_TI_trace);
/* jedule */
-#if HAVE_JEDULE
+#if SIMGRID_HAVE_JEDULE
XBT_LOG_CONNECT(jedule);
XBT_LOG_CONNECT(jed_sd);
#endif
/* mc */
-#if HAVE_MC
+#if SIMGRID_HAVE_MC
XBT_LOG_CONNECT(mc);
XBT_LOG_CONNECT(mc_checkpoint);
XBT_LOG_CONNECT(mc_comm_determinism);
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);
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(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 HAVE_NS3
+#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_trace);
XBT_LOG_CONNECT(surf_vm);
XBT_LOG_CONNECT(surf_host);
-
+
#endif /* simgrid_EXPORTS */
}
void xbt_log_init(int *argc, char **argv)
{
unsigned help_requested = 0; /* 1: logs; 2: categories */
- int i;
- int j;
- char *opt;
+ int j = 1;
/* uncomment to set the LOG category to debug directly */
// _XBT_LOGV(log).threshold = xbt_log_priority_debug;
xbt_log_connect_categories();
/* Set logs and init log submodule */
- for (j = i = 1; i < *argc; i++) {
+ for (int i = 1; i < *argc; i++) {
if (!strncmp(argv[i], "--log=", strlen("--log="))) {
- opt = strchr(argv[i], '=');
+ char* opt = strchr(argv[i], '=');
opt++;
xbt_log_control_set(opt);
XBT_DEBUG("Did apply '%s' as log setting", opt);
unsigned int cursor;
xbt_log_setting_t setting = NULL;
- int found = 0;
XBT_DEBUG("Initializing category '%s' (firstChild=%s, nextSibling=%s)", category->name,
(category->firstChild ? category->firstChild->name : "none"),
if (xbt_log_settings) {
xbt_assert(category, "NULL category");
xbt_assert(category->name);
+ int found = 0;
xbt_dynar_foreach(xbt_log_settings, cursor, setting) {
xbt_assert(setting, "Damnit, NULL cat in the list");
control_string += strspn(control_string, " ");
const char *name = control_string;
- control_string += strcspn(control_string, ".= ");
+ control_string += strcspn(control_string, ".:= ");
const char *dot = control_string;
control_string += strcspn(control_string, ":= ");
const char *eq = control_string;
- if(*dot != '.' && (*eq == '=' || *eq == ':'))
- xbt_die ("Invalid control string '%s'", orig_control_string);
+ xbt_assert(*dot == '.' || (*eq != '=' && *eq != ':'), "Invalid control string '%s'", orig_control_string);
if (!strncmp(dot + 1, "threshold", (size_t) (eq - dot - 1))) {
int i;
} else {
char buff[512];
snprintf(buff, MIN(512, eq - dot), "%s", dot + 1);
- THROWF(arg_error, 0, "Unknown setting of the log category: '%s'", buff);
+ xbt_die("Unknown setting of the log category: '%s'", buff);
}
set->catname = (char *) xbt_malloc(dot - name + 1);
/* Parse each entry and either use it right now (if the category was already created), or store it for further use */
xbt_dynar_foreach(set_strings, cpt, str) {
- xbt_log_category_t cat = NULL;
-
set = _xbt_log_parse_setting(str);
- cat = _xbt_log_cat_searchsub(&_XBT_LOGV(XBT_LOG_ROOT_CAT), set->catname);
+ xbt_log_category_t cat = _xbt_log_cat_searchsub(&_XBT_LOGV(XBT_LOG_ROOT_CAT), set->catname);
if (cat) {
XBT_DEBUG("Apply directly");
static void xbt_log_help(void)
{
- printf(
-"Description of the logging output:\n"
-"\n"
-" Threshold configuration: --log=CATEGORY_NAME.thres:PRIORITY_LEVEL\n"
-" CATEGORY_NAME: defined in code with function 'XBT_LOG_NEW_CATEGORY'\n"
-" PRIORITY_LEVEL: the level to print (trace,debug,verbose,info,warning,error,critical)\n"
-" -> trace: enter and return of some functions\n"
-" -> debug: crufty output\n"
-" -> verbose: verbose output for the user wanting more\n"
-" -> info: output about the regular functionning\n"
-" -> warning: minor issue encountered\n"
-" -> error: issue encountered\n"
-" -> critical: major issue encountered\n"
-"\n"
-" Format configuration: --log=CATEGORY_NAME.fmt:OPTIONS\n"
-" OPTIONS may be:\n"
-" -> %%%%: the %% char\n"
-" -> %%n: platform-dependent line separator (LOG4J compatible)\n"
-" -> %%e: plain old space (SimGrid extension)\n"
-"\n"
-" -> %%m: user-provided message\n"
-"\n"
-" -> %%c: Category name (LOG4J compatible)\n"
-" -> %%p: Priority name (LOG4J compatible)\n"
-"\n"
-" -> %%h: Hostname (SimGrid extension)\n"
-" -> %%P: Process name (SimGrid extension)\n"
-" -> %%t: Thread \"name\" (LOG4J compatible -- actually the address of the thread in memory)\n"
-" -> %%i: Process PID (SimGrid extension -- this is a 'i' as in 'i'dea)\n"
-"\n"
-" -> %%F: file name where the log event was raised (LOG4J compatible)\n"
-" -> %%l: location where the log event was raised (LOG4J compatible, like '%%F:%%L' -- this is a l as 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"
-"\n"
-" -> %%b: full backtrace (Called %%throwable in LOG4J). Defined only under windows or when using the GNU libc because\n"
-" backtrace() is not defined elsewhere, and we only have a fallback for windows boxes, not mac ones for example.\n"
-" -> %%B: short backtrace (only the first line of the %%b). Called %%throwable{short} in LOG4J; defined where %%b is.\n"
-"\n"
-" -> %%d: date (UNIX-like epoch)\n"
-" -> %%r: application age (time elapsed since the beginning of the application)\n"
-"\n"
-" Miscellaneous:\n"
-" --help-log-categories Display the current hierarchy of log categories.\n"
-" --log=no_loc Don't print file names in messages (for tesh tests).\n"
-"\n"
- );
+ printf("Description of the logging output:\n"
+ "\n"
+ " Threshold configuration: --log=CATEGORY_NAME.thres:PRIORITY_LEVEL\n"
+ " CATEGORY_NAME: defined in code with function 'XBT_LOG_NEW_CATEGORY'\n"
+ " PRIORITY_LEVEL: the level to print (trace,debug,verbose,info,warning,error,critical)\n"
+ " -> trace: enter and return of some functions\n"
+ " -> debug: crufty output\n"
+ " -> verbose: verbose output for the user wanting more\n"
+ " -> info: output about the regular functioning\n"
+ " -> warning: minor issue encountered\n"
+ " -> error: issue encountered\n"
+ " -> critical: major issue encountered\n"
+ " The default priority level is 'info'.\n"
+ "\n"
+ " Format configuration: --log=CATEGORY_NAME.fmt:FORMAT\n"
+ " FORMAT string may contain:\n"
+ " -> %%%%: the %% char\n"
+ " -> %%n: platform-dependent line separator (LOG4J compatible)\n"
+ " -> %%e: plain old space (SimGrid extension)\n"
+ "\n"
+ " -> %%m: user-provided message\n"
+ "\n"
+ " -> %%c: Category name (LOG4J compatible)\n"
+ " -> %%p: Priority name (LOG4J compatible)\n"
+ "\n"
+ " -> %%h: Hostname (SimGrid extension)\n"
+ " -> %%P: Process name (SimGrid extension)\n"
+ " -> %%t: Thread \"name\" (LOG4J compatible -- actually the address of the thread in memory)\n"
+ " -> %%i: Process PID (SimGrid extension -- this is a 'i' as in 'i'dea)\n"
+ "\n"
+ " -> %%F: file name where the log event was raised (LOG4J compatible)\n"
+ " -> %%l: location where the log event was raised (LOG4J compatible, like '%%F:%%L' -- this is a l as "
+ "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"
+ "\n"
+ " -> %%b: full backtrace (Called %%throwable in LOG4J). Defined only under windows or when using the "
+ "GNU libc because\n"
+ " backtrace() is not defined elsewhere, and we only have a fallback for windows boxes, not "
+ "mac ones for example.\n"
+ " -> %%B: short backtrace (only the first line of the %%b). Called %%throwable{short} in LOG4J; "
+ "defined where %%b is.\n"
+ "\n"
+ " -> %%d: date (UNIX-like epoch)\n"
+ " -> %%r: application age (time elapsed since the beginning of the application)\n"
+ "\n"
+ " Miscellaneous:\n"
+ " --help-log-categories Display the current hierarchy of log categories.\n"
+ " --log=no_loc Don't print file names in messages (for tesh tests).\n"
+ "\n");
}
static int xbt_log_cat_cmp(const void *pa, const void *pb)