Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fix example in the documentation
[simgrid.git] / src / xbt / log.c
index 834acb2..31b809f 100644 (file)
@@ -1,8 +1,7 @@
-/* $Id$ */
-
 /* log - a generic logging facility in the spirit of log4j                  */
 
-/* Copyright (c) 2003-2007 Martin Quinson. All rights reserved.             */
+/* Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009, 2010. 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 <stdarg.h>
 #include <ctype.h>
-#include <stdio.h> /* snprintf */
-#include <stdlib.h> /* snprintf */
+#include <stdio.h>              /* snprintf */
+#include <stdlib.h>             /* snprintf */
 
-#include "portable.h" /* to get a working stdarg.h */
+#include "portable.h"           /* to get a working stdarg.h */
 
 #include "xbt_modinter.h"
 
@@ -24,7 +23,8 @@
 #include "xbt/log_private.h"
 #include "xbt/dynar.h"
 
-XBT_PUBLIC_DATA(int) (*xbt_pid)();
+XBT_PUBLIC_DATA(int) (*xbt_pid) ();
+int xbt_log_no_loc = 0; /* if set to true (with --log=no_loc), file localization will be omitted (for tesh tests) */
 
 /** \addtogroup XBT_log
  *
@@ -269,17 +269,17 @@ int main() {
        xbt_log_control_set("SA.thresh:3");
 
        / * This request is enabled, because WARNING >= INFO. * /
-       CWARN2(VSS, "Low fuel level.");
+       CWARN0(VSS, "Low fuel level.");
 
        / * This request is disabled, because DEBUG < INFO. * /
-       CDEBUG2(VSS, "Starting search for nearest gas station.");
+       CDEBUG0(VSS, "Starting search for nearest gas station.");
 
        / * The default category SA inherits its priority from VSS. Thus,
           the following request is enabled because INFO >= INFO.  * /
-       INFO1("Located nearest gas station.");
+       INFO0("Located nearest gas station.");
 
        / * This request is disabled, because DEBUG < INFO. * /
-       DEBUG1("Exiting gas station search");
+       DEBUG0("Exiting gas station search");
 }
 \endverbatim
 
@@ -463,12 +463,11 @@ This is on our TODO list for quite a while now, but your help would be
 welcome here, too.
 
 
*//*'*/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             *//*' */
 
 
-xbt_log_appender_t xbt_log_default_appender = NULL; /* set in log_init */
+xbt_log_appender_t xbt_log_default_appender = NULL;     /* set in log_init */
 xbt_log_layout_t xbt_log_default_layout = NULL; /* set in log_init */
-int _log_usable = 0;
 
 typedef struct {
   char *catname;
@@ -476,12 +475,13 @@ typedef struct {
   char *fmt;
   int additivity;
   xbt_log_appender_t appender;
-} s_xbt_log_setting_t,*xbt_log_setting_t;
+} s_xbt_log_setting_t, *xbt_log_setting_t;
 
-static xbt_dynar_t xbt_log_settings=NULL;
+static xbt_dynar_t xbt_log_settings = NULL;
 
-static void _free_setting(void *s) {
-  xbt_log_setting_t set=*(xbt_log_setting_t*)s;
+static void _free_setting(void *s)
+{
+  xbt_log_setting_t set = *(xbt_log_setting_t *) s;
   if (set) {
     free(set->catname);
     if (set->fmt)
@@ -489,84 +489,91 @@ static void _free_setting(void *s) {
     free(set);
   }
 }
+
 static void _xbt_log_cat_apply_set(xbt_log_category_t category,
                                    xbt_log_setting_t setting);
 
 const char *xbt_log_priority_names[8] = {
-                                         "NONE",
-                                         "TRACE",
-                                         "DEBUG",
-                                         "VERBOSE",
-                                         "INFO",
-                                         "WARNING",
-                                         "ERROR",
-                                         "CRITICAL"
+  "NONE",
+  "TRACE",
+  "DEBUG",
+  "VERBOSE",
+  "INFO",
+  "WARNING",
+  "ERROR",
+  "CRITICAL"
 };
 
 s_xbt_log_category_t _XBT_LOGV(XBT_LOG_ROOT_CAT) = {
-                                                    NULL /*parent*/, NULL /* firstChild */, NULL /* nextSibling */,
-                                                    "root", xbt_log_priority_uninitialized /* threshold */,
-                                                    0 /* isThreshInherited */,
-                                                    NULL /* appender */, NULL /* layout */,
-                                                    0 /* additivity */
+  NULL /*parent */ , NULL /* firstChild */ , NULL /* nextSibling */ ,
+    "root", xbt_log_priority_uninitialized /* threshold */ ,
+    0 /* isThreshInherited */ ,
+    NULL /* appender */ , NULL /* layout */ ,
+    0                           /* additivity */
 };
 
-XBT_LOG_NEW_CATEGORY(xbt,"All XBT categories (simgrid toolbox)");
-XBT_LOG_NEW_CATEGORY(surf,"All SURF categories");
-XBT_LOG_NEW_CATEGORY(msg,"All MSG categories");
-XBT_LOG_NEW_CATEGORY(simix,"All SIMIX categories");
+XBT_LOG_NEW_CATEGORY(xbt, "All XBT categories (simgrid toolbox)");
+XBT_LOG_NEW_CATEGORY(surf, "All SURF categories");
+XBT_LOG_NEW_CATEGORY(msg, "All MSG categories");
+XBT_LOG_NEW_CATEGORY(simix, "All SIMIX categories");
+XBT_LOG_NEW_CATEGORY(mc, "All MC categories");
+XBT_LOG_NEW_CATEGORY(bindings, "All bindings categories");
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(log, xbt,
+                                "Loggings from the logging mechanism itself");
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(log,xbt,"Loggings from the logging mechanism itself");
+/* create the default appender and install it in the root category,
+   which were already created (damnit. Too slow little beetle) */
+void xbt_log_preinit(void) {
+  xbt_log_default_appender = xbt_log_appender_file_new(NULL);
+  xbt_log_default_layout = xbt_log_layout_simple_new(NULL);
+  _XBT_LOGV(XBT_LOG_ROOT_CAT).appender = xbt_log_default_appender;
+  _XBT_LOGV(XBT_LOG_ROOT_CAT).layout = xbt_log_default_layout;
+}
 
 /** @brief Get all logging settings from the command line
  *
  * xbt_log_control_set() is called on each string we got from cmd line
  */
-void xbt_log_init(int *argc,char **argv) {
-  int i,j;
+void xbt_log_init(int *argc, char **argv) {
+  int i, j;
   char *opt;
 
-  /* create the default appender and install it in the root category,
-          which were already created (damnit. Too slow little beetle)*/
-  xbt_log_default_appender = xbt_log_appender_file_new(NULL);
-  xbt_log_default_layout = xbt_log_layout_simple_new(NULL);
-  _XBT_LOGV(XBT_LOG_ROOT_CAT).appender = xbt_log_default_appender;
-  _XBT_LOGV(XBT_LOG_ROOT_CAT).layout = xbt_log_default_layout;
-  _log_usable = 1;
-
-  //   _XBT_LOGV(log).threshold = xbt_log_priority_debug; /* uncomment to set the LOG category to debug directly */
+  //    _XBT_LOGV(log).threshold = xbt_log_priority_debug; /* uncomment to set the LOG category to debug directly */
 
   /* Set logs and init log submodule */
-  for (i=1; i<*argc; i++){
-    if (!strncmp(argv[i],"--log=",strlen("--log=")) ||
-        !strncmp(argv[i],"--gras-log=",strlen("--gras-log=")) ||
-        !strncmp(argv[i],"--surf-log=",strlen("--surf-log=")) ||
-        !strncmp(argv[i],"--msg-log=",strlen("--msg-log=")) ||
-        !strncmp(argv[i],"--simix-log=",strlen("--simix-log=")) ||
-        !strncmp(argv[i],"--xbt-log=",strlen("--xbt-log="))){
-
-      if (strncmp(argv[i],"--log=",strlen("--log=")))
-        WARN2("Option %.*s is deprecated and will disapear in the future. Use --log instead.",
-              (int)(strchr(argv[i],'=')-argv[i]),argv[i]);
-
-      opt=strchr(argv[i],'=');
+  for (i = 1; i < *argc; i++) {
+    if (!strncmp(argv[i], "--log=", strlen("--log=")) ||
+        !strncmp(argv[i], "--gras-log=", strlen("--gras-log=")) ||
+        !strncmp(argv[i], "--surf-log=", strlen("--surf-log=")) ||
+        !strncmp(argv[i], "--msg-log=", strlen("--msg-log=")) ||
+        !strncmp(argv[i], "--simix-log=", strlen("--simix-log=")) ||
+        !strncmp(argv[i], "--xbt-log=", strlen("--xbt-log="))) {
+
+      if (strncmp(argv[i], "--log=", strlen("--log=")))
+        WARN2
+          ("Option %.*s is deprecated and will disapear in the future. Use --log instead.",
+           (int) (strchr(argv[i], '=') - argv[i]), argv[i]);
+
+      opt = strchr(argv[i], '=');
       opt++;
       xbt_log_control_set(opt);
-      DEBUG1("Did apply '%s' as log setting",opt);
-      /*remove this from argv*/
+      DEBUG1("Did apply '%s' as log setting", opt);
+      /*remove this from argv */
 
-      for (j=i+1; j<*argc; j++){
-        argv[j-1] = argv[j];
+      for (j = i + 1; j < *argc; j++) {
+        argv[j - 1] = argv[j];
       }
 
-      argv[j-1] = NULL;
+      argv[j - 1] = NULL;
       (*argc)--;
-      i--; /* compensate effect of next loop incrementation */
+      i--;                      /* compensate effect of next loop incrementation */
     }
   }
 }
 
-static void log_cat_exit(xbt_log_category_t cat) {
+static void log_cat_exit(xbt_log_category_t cat)
+{
   xbt_log_category_t child;
 
   if (cat->appender) {
@@ -580,35 +587,30 @@ static void log_cat_exit(xbt_log_category_t cat) {
     free(cat->layout);
   }
 
-  for(child=cat->firstChild ; child != NULL; child = child->nextSibling)
+  for (child = cat->firstChild; child != NULL; child = child->nextSibling)
     log_cat_exit(child);
 }
 
-void xbt_log_exit(void) {
+void xbt_log_postexit(void)
+{
   VERB0("Exiting log");
   xbt_dynar_free(&xbt_log_settings);
   log_cat_exit(&_XBT_LOGV(XBT_LOG_ROOT_CAT));
-  _log_usable = 0;
 }
 
-void _xbt_log_event_log( xbt_log_event_t ev, const char *fmt, ...) {
+void _xbt_log_event_log(xbt_log_event_t ev, const char *fmt, ...)
+{
 
   xbt_log_category_t cat = ev->cat;
-  if (!_log_usable) {
-    /* Make sure that the layouts have been malloced */
-    xbt_log_default_appender = xbt_log_appender_file_new(NULL);
-    xbt_log_default_layout = xbt_log_layout_simple_new(NULL);
-    _XBT_LOGV(XBT_LOG_ROOT_CAT).appender = xbt_log_default_appender;
-    _XBT_LOGV(XBT_LOG_ROOT_CAT).layout = xbt_log_default_layout;
-    _log_usable = 1;
-  }
 
   va_start(ev->ap, fmt);
   va_start(ev->ap_copy, fmt);
-  while(1) {
+  while (1) {
     xbt_log_appender_t appender = cat->appender;
     if (appender != NULL) {
-      xbt_assert1(cat->layout,"No valid layout for the appender of category %s",cat->name);
+      xbt_assert1(cat->layout,
+                  "No valid layout for the appender of category %s",
+                  cat->name);
       cat->layout->do_layout(cat->layout, ev, fmt, appender);
     }
     if (!cat->additivity)
@@ -619,114 +621,83 @@ void _xbt_log_event_log( xbt_log_event_t ev, const char *fmt, ...) {
   va_end(ev->ap);
   va_end(ev->ap_copy);
 
-#ifdef WIN32
+#ifdef _XBT_WIN32
   free(ev->buffer);
 #endif
 }
 
-static void _xbt_log_cat_apply_set(xbt_log_category_t category,
-                                   xbt_log_setting_t setting) {
+/* NOTE:
+ *
+ * The standard logging macros use _XBT_LOG_ISENABLED, which calls
+ * _xbt_log_cat_init().  Thus, if we want to avoid an infinite
+ * recursion, we can not use the standard logging macros in
+ * _xbt_log_cat_init(), and in all functions called from it.
+ *
+ * To circumvent the problem, we define the macro_xbt_log_init() as
+ * (0) for the length of the affected functions, and we do not forget
+ * to undefine it at the end!
+ */
 
-  s_xbt_log_event_t _log_ev;
+static void _xbt_log_cat_apply_set(xbt_log_category_t category,
+                                   xbt_log_setting_t setting)
+{
+#define _xbt_log_cat_init(a, b) (0)
 
   if (setting->thresh != xbt_log_priority_uninitialized) {
     xbt_log_threshold_set(category, setting->thresh);
 
-    if (category->threshold <= xbt_log_priority_debug) {
-      _log_ev.cat = category;
-      _log_ev.priority = xbt_log_priority_debug;
-      _log_ev.fileName = __FILE__ ;
-      _log_ev.functionName = _XBT_FUNCTION ;
-      _log_ev.lineNum = __LINE__ ;
-
-      _xbt_log_event_log(&_log_ev,
-                         "Apply settings for category '%s': set threshold to %s (=%d)",
-                         category->name,
-                         xbt_log_priority_names[category->threshold],
-                         category->threshold);
-    }
+    DEBUG3("Apply settings for category '%s': set threshold to %s (=%d)",
+           category->name, xbt_log_priority_names[category->threshold],
+           category->threshold);
   }
 
   if (setting->fmt) {
-    xbt_log_layout_set(category,xbt_log_layout_format_new(setting->fmt));
-
-    if (category->threshold <= xbt_log_priority_debug) {
-      _log_ev.cat = category;
-      _log_ev.priority = xbt_log_priority_debug;
-      _log_ev.fileName = __FILE__ ;
-      _log_ev.functionName = _XBT_FUNCTION ;
-      _log_ev.lineNum = __LINE__ ;
-
-      _xbt_log_event_log(&_log_ev,
-                         "Apply settings for category '%s': set format to %s",
-                         category->name,
-                         setting->fmt);
-    }
+    xbt_log_layout_set(category, xbt_log_layout_format_new(setting->fmt));
+
+    DEBUG2("Apply settings for category '%s': set format to %s",
+           category->name, setting->fmt);
   }
 
   if (setting->additivity != -1) {
-    xbt_log_additivity_set(category,setting->additivity);
-
-    if (category->threshold <= xbt_log_priority_debug) {
-      _log_ev.cat = category;
-      _log_ev.priority = xbt_log_priority_debug;
-      _log_ev.fileName = __FILE__ ;
-      _log_ev.functionName = _XBT_FUNCTION ;
-      _log_ev.lineNum = __LINE__ ;
-
-      _xbt_log_event_log(&_log_ev,
-                         "Apply settings for category '%s': set additivity to %s",
-                         category->name,
-                         (setting->additivity?"on":"off"));
-    }
+    xbt_log_additivity_set(category, setting->additivity);
+
+    DEBUG2("Apply settings for category '%s': set additivity to %s",
+           category->name, (setting->additivity ? "on" : "off"));
   }
   if (setting->appender) {
-         xbt_log_appender_set(category,setting->appender);
-         if (!category->layout)
-                 xbt_log_layout_set(category,xbt_log_layout_simple_new(NULL));
-         category->additivity = 0;
-         if (category->threshold <= xbt_log_priority_debug) {
-             _log_ev.cat = category;
-             _log_ev.priority = xbt_log_priority_debug;
-             _log_ev.fileName = __FILE__ ;
-             _log_ev.functionName = _XBT_FUNCTION ;
-             _log_ev.lineNum = __LINE__ ;
-
-             _xbt_log_event_log(&_log_ev,
-                                "Set %p as appender of category '%s'",
-                                setting->appender,
-                                category->name);
-           }
+    xbt_log_appender_set(category, setting->appender);
+    if (!category->layout)
+      xbt_log_layout_set(category, xbt_log_layout_simple_new(NULL));
+    category->additivity = 0;
+    DEBUG2("Set %p as appender of category '%s'",
+           setting->appender, category->name);
   }
 
+#undef _xbt_log_cat_init
 }
+
 /*
  * This gets called the first time a category is referenced and performs the
  * initialization.
  * Also resets threshold to inherited!
  */
 int _xbt_log_cat_init(xbt_log_category_t category,
-                      e_xbt_log_priority_t priority) {
+                      e_xbt_log_priority_t priority)
+{
+#define _xbt_log_cat_init(a, b) (0)
+
   unsigned int cursor;
-  xbt_log_setting_t setting=NULL;
+  xbt_log_setting_t setting = NULL;
   int found = 0;
-  s_xbt_log_event_t _log_ev;
-
-  if (_XBT_LOGV(log).threshold <= xbt_log_priority_debug
-      && _XBT_LOGV(log).threshold != xbt_log_priority_uninitialized) {
-    _log_ev.cat = &_XBT_LOGV(log);
-    _log_ev.priority = xbt_log_priority_debug;
-    _log_ev.fileName = __FILE__ ;
-    _log_ev.functionName = _XBT_FUNCTION ;
-    _log_ev.lineNum = __LINE__ ;
-    _xbt_log_event_log(&_log_ev, "Initializing category '%s' (firstChild=%s, nextSibling=%s)",
-                       category->name,
-                       (category->firstChild ?category->firstChild->name :"none"),
-                       (category->nextSibling?category->nextSibling->name:"none"));
-  }
 
-  if(category == &_XBT_LOGV(XBT_LOG_ROOT_CAT)){
-    category->threshold = xbt_log_priority_info;/* xbt_log_priority_debug*/;
+  DEBUG3("Initializing category '%s' (firstChild=%s, nextSibling=%s)",
+         category->name,
+         (category->firstChild ? category->firstChild->name : "none"),
+         (category->nextSibling ? category->nextSibling->name : "none"));
+
+  if (category == &_XBT_LOGV(XBT_LOG_ROOT_CAT)) {
+    category->threshold = xbt_log_priority_info;
+    /* xbt_log_priority_debug */ ;
     category->appender = xbt_log_default_appender;
     category->layout = xbt_log_default_layout;
   } else {
@@ -734,22 +705,19 @@ int _xbt_log_cat_init(xbt_log_category_t category,
     if (!category->parent)
       category->parent = &_XBT_LOGV(XBT_LOG_ROOT_CAT);
 
-    if (_XBT_LOGV(log).threshold <= xbt_log_priority_debug
-        && _XBT_LOGV(log).threshold != xbt_log_priority_uninitialized) {
-      _log_ev.lineNum = __LINE__ ;
-      _xbt_log_event_log(&_log_ev, "Set %s (%s) as father of %s ", category->parent->name,
-                         (category->parent->threshold == xbt_log_priority_uninitialized ? "uninited":xbt_log_priority_names[category->parent->threshold]),
-                         category->name);
-    }
+    DEBUG3("Set %s (%s) as father of %s ",
+           category->parent->name,
+           (category->parent->threshold == xbt_log_priority_uninitialized ?
+            "uninited" : xbt_log_priority_names[category->parent->threshold]),
+           category->name);
     xbt_log_parent_set(category, category->parent);
 
-    if (_XBT_LOGV(log).threshold < xbt_log_priority_info
-        && _XBT_LOGV(log).threshold != xbt_log_priority_uninitialized) {
-      char *buf,*res=NULL;
+    if (XBT_LOG_ISENABLED(log, xbt_log_priority_debug)) {
+      char *buf, *res = NULL;
       xbt_log_category_t cpp = category->parent->firstChild;
       while (cpp) {
         if (res) {
-          buf = bprintf("%s %s",res,cpp->name);
+          buf = bprintf("%s %s", res, cpp->name);
           free(res);
           res = buf;
         } else {
@@ -758,10 +726,10 @@ int _xbt_log_cat_init(xbt_log_category_t category,
         cpp = cpp->nextSibling;
       }
 
-      _log_ev.lineNum = __LINE__ ;
-      _xbt_log_event_log(&_log_ev,
-                         "Childs of %s: %s; nextSibling: %s", category->parent->name,res,
-                         (category->parent->nextSibling?category->parent->nextSibling->name:"none"));
+      DEBUG3("Childs of %s: %s; nextSibling: %s",
+             category->parent->name, res,
+             (category->parent->nextSibling ?
+              category->parent->nextSibling->name : "none"));
 
       free(res);
     }
@@ -772,54 +740,49 @@ int _xbt_log_cat_init(xbt_log_category_t category,
   if (!xbt_log_settings)
     return priority >= category->threshold;
 
-  xbt_assert0(category,"NULL category");
+  xbt_assert0(category, "NULL category");
   xbt_assert(category->name);
 
-  xbt_dynar_foreach(xbt_log_settings,cursor,setting) {
-    xbt_assert0(setting,"Damnit, NULL cat in the list");
-    xbt_assert1(setting->catname,"NULL setting(=%p)->catname",(void*)setting);
+  xbt_dynar_foreach(xbt_log_settings, cursor, setting) {
+    xbt_assert0(setting, "Damnit, NULL cat in the list");
+    xbt_assert1(setting->catname, "NULL setting(=%p)->catname",
+                (void *) setting);
 
-    if (!strcmp(setting->catname,category->name)) {
+    if (!strcmp(setting->catname, category->name)) {
 
       found = 1;
 
-      _xbt_log_cat_apply_set(category,setting);
+      _xbt_log_cat_apply_set(category, setting);
 
-      xbt_dynar_cursor_rm(xbt_log_settings,&cursor);
+      xbt_dynar_cursor_rm(xbt_log_settings, &cursor);
     }
   }
 
-  if (!found && category->threshold <= xbt_log_priority_verbose) {
-
-    _log_ev.cat = &_XBT_LOGV(log);
-    _log_ev.priority = xbt_log_priority_verbose;
-    _log_ev.fileName = __FILE__ ;
-    _log_ev.functionName = _XBT_FUNCTION ;
-    _log_ev.lineNum = __LINE__ ;
-
-    _xbt_log_event_log(&_log_ev,
-                       "Category '%s': inherited threshold = %s (=%d)",
-                       category->name,
-                       xbt_log_priority_names[category->threshold], category->threshold);
-  }
+  if (!found)
+    DEBUG3("Category '%s': inherited threshold = %s (=%d)",
+           category->name, xbt_log_priority_names[category->threshold],
+           category->threshold);
 
   return priority >= category->threshold;
+
+#undef _xbt_log_cat_init
 }
 
-void xbt_log_parent_set(xbt_log_category_t cat,xbt_log_category_t parent)  {
+void xbt_log_parent_set(xbt_log_category_t cat, xbt_log_category_t parent)
+{
 
-  xbt_assert0(cat,"NULL category to be given a parent");
-  xbt_assert1(parent,"The parent category of %s is NULL",cat->name);
+  xbt_assert0(cat, "NULL category to be given a parent");
+  xbt_assert1(parent, "The parent category of %s is NULL", cat->name);
 
   /*
    * if the threshold is initialized
    * unlink from current parent
    */
-  if(cat->threshold != xbt_log_priority_uninitialized){
+  if (cat->threshold != xbt_log_priority_uninitialized) {
 
-    xbt_log_category_tcpp = &parent->firstChild;
+    xbt_log_category_t *cpp = &parent->firstChild;
 
-    while(*cpp != cat && *cpp != NULL) {
+    while (*cpp != cat && *cpp != NULL) {
       cpp = &(*cpp)->nextSibling;
     }
 
@@ -832,10 +795,9 @@ void xbt_log_parent_set(xbt_log_category_t cat,xbt_log_category_t parent)  {
 
   parent->firstChild = cat;
 
-  if (parent->threshold == xbt_log_priority_uninitialized){
+  if (parent->threshold == xbt_log_priority_uninitialized) {
 
-    _xbt_log_cat_init(parent,
-                      xbt_log_priority_uninitialized/* ignored*/);
+    _xbt_log_cat_init(parent, xbt_log_priority_uninitialized /* ignored */ );
   }
 
   cat->threshold = parent->threshold;
@@ -844,15 +806,17 @@ void xbt_log_parent_set(xbt_log_category_t cat,xbt_log_category_t parent)  {
 
 }
 
-static void _set_inherited_thresholds(xbt_log_category_t cat) {
+static void _set_inherited_thresholds(xbt_log_category_t cat)
+{
 
   xbt_log_category_t child = cat->firstChild;
 
-  for; child != NULL; child = child->nextSibling) {
+  for (; child != NULL; child = child->nextSibling) {
     if (child->isThreshInherited) {
       if (cat != &_XBT_LOGV(log))
         VERB3("Set category threshold of %s to %s (=%d)",
-              child->name,xbt_log_priority_names[cat->threshold],cat->threshold);
+              child->name, xbt_log_priority_names[cat->threshold],
+              cat->threshold);
       child->threshold = cat->threshold;
       _set_inherited_thresholds(child);
     }
@@ -861,8 +825,9 @@ static void _set_inherited_thresholds(xbt_log_category_t cat) {
 
 }
 
-void xbt_log_threshold_set(xbt_log_category_t   cat,
-                           e_xbt_log_priority_t threshold) {
+void xbt_log_threshold_set(xbt_log_category_t cat,
+                           e_xbt_log_priority_t threshold)
+{
   cat->threshold = threshold;
   cat->isThreshInherited = 0;
 
@@ -870,12 +835,13 @@ void xbt_log_threshold_set(xbt_log_category_t   cat,
 
 }
 
-static xbt_log_setting_t _xbt_log_parse_setting(const char* control_string) {
+static xbt_log_setting_t _xbt_log_parse_setting(const char *control_string)
+{
 
-  xbt_log_setting_t set = xbt_new(s_xbt_log_setting_t,1);
+  xbt_log_setting_t set = xbt_new(s_xbt_log_setting_t, 1);
   const char *name, *dot, *eq;
 
-  set->catname=NULL;
+  set->catname = NULL;
   set->thresh = xbt_log_priority_uninitialized;
   set->fmt = NULL;
   set->additivity = -1;
@@ -883,7 +849,7 @@ static xbt_log_setting_t _xbt_log_parse_setting(const char* control_string) {
 
   if (!*control_string)
     return set;
-  DEBUG1("Parse log setting '%s'",control_string);
+  DEBUG1("Parse log setting '%s'", control_string);
 
   control_string += strspn(control_string, " ");
   name = control_string;
@@ -894,91 +860,92 @@ static xbt_log_setting_t _xbt_log_parse_setting(const char* control_string) {
   control_string += strcspn(control_string, " ");
 
   xbt_assert1(*dot == '.' && (*eq == '=' || *eq == ':'),
-              "Invalid control string '%s'",control_string);
+              "Invalid control string '%s'", control_string);
 
-  if (!strncmp(dot + 1, "thresh", (size_t)(eq - dot - 1))) {
+  if (!strncmp(dot + 1, "thresh", (size_t) (eq - dot - 1))) {
     int i;
-    char *neweq=xbt_strdup(eq+1);
-    char *p=neweq-1;
+    char *neweq = xbt_strdup(eq + 1);
+    char *p = neweq - 1;
 
     while (*(++p) != '\0') {
       if (*p >= 'a' && *p <= 'z') {
-        *p-='a'-'A';
+        *p -= 'a' - 'A';
       }
     }
 
-    DEBUG1("New priority name = %s",neweq);
-    for (i=0; i<xbt_log_priority_infinite; i++) {
-      if (!strncmp(xbt_log_priority_names[i],neweq,p-eq)) {
-        DEBUG1("This is priority %d",i);
+    DEBUG1("New priority name = %s", neweq);
+    for (i = 0; i < xbt_log_priority_infinite; i++) {
+      if (!strncmp(xbt_log_priority_names[i], neweq, p - eq)) {
+        DEBUG1("This is priority %d", i);
         break;
       }
     }
-    if (i<xbt_log_priority_infinite) {
-      set->thresh= (e_xbt_log_priority_t) i;
+    if (i < xbt_log_priority_infinite) {
+      set->thresh = (e_xbt_log_priority_t) i;
     } else {
-      THROW1(arg_error,0,
-             "Unknown priority name: %s (must be one of: trace,debug,verbose,info,warning,error,critical)",eq+1);
+      THROW1(arg_error, 0,
+             "Unknown priority name: %s (must be one of: trace,debug,verbose,info,warning,error,critical)",
+             eq + 1);
     }
     free(neweq);
-  } else if ( !strncmp(dot + 1, "add", (size_t)(eq - dot - 1)) ||
-      !strncmp(dot + 1, "additivity", (size_t)(eq - dot - 1)) ) {
+  } else if (!strncmp(dot + 1, "add", (size_t) (eq - dot - 1)) ||
+             !strncmp(dot + 1, "additivity", (size_t) (eq - dot - 1))) {
 
-    char *neweq=xbt_strdup(eq+1);
-    char *p=neweq-1;
+    char *neweq = xbt_strdup(eq + 1);
+    char *p = neweq - 1;
 
     while (*(++p) != '\0') {
       if (*p >= 'a' && *p <= 'z') {
-        *p-='a'-'A';
+        *p -= 'a' - 'A';
       }
     }
-    if ( !strcmp(neweq,"ON") ||
-        !strcmp(neweq,"YES") ||
-        !strcmp(neweq,"1") ) {
+    if (!strcmp(neweq, "ON") || !strcmp(neweq, "YES") || !strcmp(neweq, "1")) {
       set->additivity = 1;
     } else {
       set->additivity = 0;
     }
     free(neweq);
-  } else if ( !strncmp(dot + 1, "app", (size_t)(eq - dot - 1)) ||
-      !strncmp(dot + 1, "appender", (size_t)(eq - dot - 1)) ) {
+  } else if (!strncmp(dot + 1, "app", (size_t) (eq - dot - 1)) ||
+             !strncmp(dot + 1, "appender", (size_t) (eq - dot - 1))) {
 
-    char *neweq=xbt_strdup(eq+1);
+    char *neweq = xbt_strdup(eq + 1);
 
-    if ( !strncmp(neweq,"file:",5) ) {
-      set->appender = xbt_log_appender_file_new(neweq+5);
+    if (!strncmp(neweq, "file:", 5)) {
+      set->appender = xbt_log_appender_file_new(neweq + 5);
     } else {
-       THROW1(arg_error,0,"Unknown appender log type: '%s'",neweq);
+      THROW1(arg_error, 0, "Unknown appender log type: '%s'", neweq);
     }
     free(neweq);
-  } else if (!strncmp(dot + 1, "fmt", (size_t)(eq - dot - 1))) {
-    set->fmt = xbt_strdup(eq+1);
+  } else if (!strncmp(dot + 1, "fmt", (size_t) (eq - dot - 1))) {
+    set->fmt = xbt_strdup(eq + 1);
   } else {
     char buff[512];
-    snprintf(buff,min(512,eq - dot),"%s",dot+1);
-    THROW1(arg_error,0,"Unknown setting of the log category: '%s'",buff);
+    snprintf(buff, min(512, eq - dot), "%s", dot + 1);
+    THROW1(arg_error, 0, "Unknown setting of the log category: '%s'", buff);
   }
-  set->catname=(char*)xbt_malloc(dot - name+1);
+  set->catname = (char *) xbt_malloc(dot - name + 1);
 
-  memcpy(set->catname,name,dot-name);
-  set->catname[dot-name]='\0'; /* Just in case */
+  memcpy(set->catname, name, dot - name);
+  set->catname[dot - name] = '\0';      /* Just in case */
   DEBUG1("This is for cat '%s'", set->catname);
 
   return set;
 }
 
-static xbt_log_category_t _xbt_log_cat_searchsub(xbt_log_category_t cat,char *name) {
-  xbt_log_category_t child,res;
+static xbt_log_category_t _xbt_log_cat_searchsub(xbt_log_category_t cat,
+                                                 char *name)
+{
+  xbt_log_category_t child, res;
 
-  DEBUG4("Search '%s' into '%s' (firstChild='%s'; nextSibling='%s')",name,cat->name,
-         (cat->firstChild  ? cat->firstChild->name :"none"),
-         (cat->nextSibling ? cat->nextSibling->name:"none"));
-  if (!strcmp(cat->name,name))
+  DEBUG4("Search '%s' into '%s' (firstChild='%s'; nextSibling='%s')", name,
+         cat->name, (cat->firstChild ? cat->firstChild->name : "none"),
+         (cat->nextSibling ? cat->nextSibling->name : "none"));
+  if (!strcmp(cat->name, name))
     return cat;
 
-  for (child=cat->firstChild ; child != NULL; child = child->nextSibling) {
-    DEBUG1("Dig into %s",child->name);
-    res = _xbt_log_cat_searchsub(child,name);
+  for (child = cat->firstChild; child != NULL; child = child->nextSibling) {
+    DEBUG1("Dig into %s", child->name);
+    res = _xbt_log_cat_searchsub(child, name);
     if (res)
       return res;
   }
@@ -1009,7 +976,8 @@ static xbt_log_category_t _xbt_log_cat_searchsub(xbt_log_category_t cat,char *na
  *      information.
  *
  */
-void xbt_log_control_set(const char* control_string) {
+void xbt_log_control_set(const char *control_string)
+{
   xbt_log_setting_t set;
 
   /* To split the string in commands, and the cursors */
@@ -1019,44 +987,50 @@ void xbt_log_control_set(const char* control_string) {
 
   if (!control_string)
     return;
-  DEBUG1("Parse log settings '%s'",control_string);
+  DEBUG1("Parse log settings '%s'", control_string);
 
+  /* Special handling of no_loc request, which asks for any file localization to be omitted (for tesh runs) */
+  if (!strcmp(control_string,"no_loc")) {
+    xbt_log_no_loc=1;
+    return;
+  }
   /* some initialization if this is the first time that this get called */
   if (xbt_log_settings == NULL)
     xbt_log_settings = xbt_dynar_new(sizeof(xbt_log_setting_t),
                                      _free_setting);
 
   /* split the string, and remove empty entries */
-  set_strings=xbt_str_split_quoted(control_string);
+  set_strings = xbt_str_split_quoted(control_string);
 
-  if (xbt_dynar_length(set_strings) == 0) { /* vicious user! */
+  if (xbt_dynar_length(set_strings) == 0) {     /* vicious user! */
     xbt_dynar_free(&set_strings);
     return;
   }
 
   /* 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;
+  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);
+    cat = _xbt_log_cat_searchsub(&_XBT_LOGV(XBT_LOG_ROOT_CAT), set->catname);
 
     if (cat) {
       DEBUG0("Apply directly");
-      _xbt_log_cat_apply_set(cat,set);
-      _free_setting((void*)&set);
+      _xbt_log_cat_apply_set(cat, set);
+      _free_setting((void *) &set);
     } else {
 
       DEBUG0("Store for further application");
-      DEBUG1("push %p to the settings",(void*)set);
-      xbt_dynar_push(xbt_log_settings,&set);
+      DEBUG1("push %p to the settings", (void *) set);
+      xbt_dynar_push(xbt_log_settings, &set);
     }
   }
   xbt_dynar_free(&set_strings);
 }
 
-void xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t app) {
+void xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t app)
+{
   if (cat->appender) {
     if (cat->appender->free_)
       cat->appender->free_(cat->appender);
@@ -1064,11 +1038,13 @@ void xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t app) {
   }
   cat->appender = app;
 }
-void xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay) {
+
+void xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay)
+{
   if (!cat->appender) {
     VERB1("No appender to category %s. Setting the file appender as default",
           cat->name);
-    xbt_log_appender_set(cat,xbt_log_appender_file_new(NULL));
+    xbt_log_appender_set(cat, xbt_log_appender_file_new(NULL));
   }
   if (cat->layout && cat != &_XBT_LOGV(root)) {
     /* better leak the default layout than check every categories to
@@ -1079,10 +1055,10 @@ void xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay) {
     }
   }
   cat->layout = lay;
-  xbt_log_additivity_set(cat,0);
+  xbt_log_additivity_set(cat, 0);
 }
 
-void xbt_log_additivity_set(xbt_log_category_t cat, int additivity) {
+void xbt_log_additivity_set(xbt_log_category_t cat, int additivity)
+{
   cat->additivity = additivity;
 }
-