X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/61427a88a76a2c2ef25d0d5b8132995c6f550e5c..61e155ac26178e40e46c04728680a1cbd426cad4:/src/xbt/log.c diff --git a/src/xbt/log.c b/src/xbt/log.c index a2362dc736..ce083fbbf8 100644 --- a/src/xbt/log.c +++ b/src/xbt/log.c @@ -1,6 +1,6 @@ /* 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 @@ -199,6 +199,8 @@ static void xbt_log_connect_categories(void) 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); @@ -220,6 +222,7 @@ static void xbt_log_connect_categories(void) 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); @@ -235,6 +238,7 @@ static void xbt_log_connect_categories(void) 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); @@ -244,6 +248,7 @@ static void xbt_log_connect_categories(void) 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); @@ -273,19 +278,12 @@ static void xbt_log_help_categories(void); void xbt_log_init(int *argc, char **argv) { unsigned help_requested = 0; /* 1: logs; 2: categories */ - int i; - int j; - char *opt; - - /* uncomment to set the LOG category to debug directly */ - // _XBT_LOGV(log).threshold = xbt_log_priority_debug; - - xbt_log_connect_categories(); + int j = 1; /* 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); @@ -352,44 +350,45 @@ void _xbt_log_event_log(xbt_log_event_t ev, const char *fmt, ...) xbt_assert(ev->priority < sizeof(xbt_log_priority_names), "Priority %d is greater than the biggest allowed value", ev->priority); - do { + while (1) { xbt_log_appender_t appender = cat->appender; - if (!appender) - continue; /* No appender, try next */ - - xbt_assert(cat->layout, "No valid layout for the appender of category %s", cat->name); + if (appender != NULL) { + xbt_assert(cat->layout, "No valid layout for the appender of category %s", cat->name); - /* First, try with a static buffer */ - if (XBT_LOG_STATIC_BUFFER_SIZE) { + /* First, try with a static buffer */ + int done = 0; char buff[XBT_LOG_STATIC_BUFFER_SIZE]; - ev->buffer = buff; + ev->buffer = buff; ev->buffer_size = sizeof buff; va_start(ev->ap, fmt); - int done = cat->layout->do_layout(cat->layout, ev, fmt); + done = cat->layout->do_layout(cat->layout, ev, fmt); va_end(ev->ap); if (done) { appender->do_append(appender, buff); - continue; /* Ok, that worked: go next */ + } else { + + /* The static buffer was too small, use a dynamically expanded one */ + ev->buffer_size = XBT_LOG_DYNAMIC_BUFFER_SIZE; + ev->buffer = xbt_malloc(ev->buffer_size); + while (1) { + va_start(ev->ap, fmt); + done = cat->layout->do_layout(cat->layout, ev, fmt); + va_end(ev->ap); + if (done) + break; /* Got it */ + ev->buffer_size *= 2; + ev->buffer = xbt_realloc(ev->buffer, ev->buffer_size); + } + appender->do_append(appender, ev->buffer); + xbt_free(ev->buffer); } } - /* The static buffer was too small, use a dynamically expanded one */ - ev->buffer_size = XBT_LOG_DYNAMIC_BUFFER_SIZE; - ev->buffer = xbt_malloc(ev->buffer_size); - while (1) { - va_start(ev->ap, fmt); - int done = cat->layout->do_layout(cat->layout, ev, fmt); - va_end(ev->ap); - if (done) - break; /* Got it */ - ev->buffer_size *= 2; - ev->buffer = xbt_realloc(ev->buffer, ev->buffer_size); - } - appender->do_append(appender, ev->buffer); - xbt_free(ev->buffer); - - } while (cat->additivity && (cat = cat->parent, 1)); + if (!cat->additivity) + break; + cat = cat->parent; + } } #undef XBT_LOG_DYNAMIC_BUFFER_SIZE @@ -755,10 +754,8 @@ void xbt_log_control_set(const char *control_string) /* 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"); @@ -808,54 +805,57 @@ void xbt_log_additivity_set(xbt_log_category_t cat, int additivity) 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)