Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update copyright notices
[simgrid.git] / src / xbt / log.c
index 159b85a..002ca12 100644 (file)
@@ -1,6 +1,6 @@
 /* log - a generic logging facility in the spirit of log4j                  */
 
-/* Copyright (c) 2004-2014. The SimGrid Team.
+/* Copyright (c) 2004-2015. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -104,13 +104,14 @@ higher about the XBT internals.
 \subsection log_app 1.3 Message appenders
 
 The message appenders are the elements in charge of actually displaying the
-message to the user. For now, only two appenders exist: the default one prints
-stuff on stderr while it is possible to create appenders printing to a specific
-file.
+message to the user. For now, four appenders exist: 
+- the default one prints stuff on stderr 
+- file sends the data to a single file
+- rollfile overwrites the file when the file grows too large
+- splitfile creates new files with a specific maximum size
 
-Other are planed (such as the one sending everything to a remote server,
-or the one using only a fixed amount of lines in a file, and rotating content on
-need). One day, for sure ;)
+Other are planed (such as the one sending everything to a remote server) 
+One day, for sure ;)
 
 \subsection log_lay 1.4 Message layouts
 
@@ -398,6 +399,17 @@ messages. This is done through the <tt>app</tt> keyword. For example,
 \verbatim --log=root.app:file:mylogfile\endverbatim redirects the output
 to the file mylogfile.
 
+For splitfile appender, the format is 
+\verbatim --log=root.app:splitfile:size:mylogfile_%.format\endverbatim
+
+The size is in bytes, and the % wildcard will be replaced by the number of the
+file. If no % is present, it will be appended at the end.
+
+rollfile appender is also available, it can be used as
+\verbatim --log=root.app:rollfile:size:mylogfile\endverbatim
+When the file grows to be larger than the size, it will be emptied and new log 
+events will be sent at its beginning 
+
 Any appender setup this way have its own layout format (simple one by default),
 so you may have to change it too afterward. Moreover, the additivity of the log category
 is also set to false to prevent log event displayed by this appender to "leak" to any other
@@ -480,11 +492,8 @@ By default, only the root category have an appender, and any other category has
 its additivity set to true. This causes all messages to be logged by the root
 category's appender.
 
-The default appender function currently prints to stderr, and the only other
-existing one writes to the specified file. More would be needed, like the one
-able to send the logs to a remote dedicated server.
-This is on our TODO list for quite a while now, but your help would be
-welcome here, too. */
+The default appender function currently prints to stderr
+*/
 
 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 */
@@ -597,7 +606,6 @@ static void xbt_log_connect_categories(void)
 #endif
 
   /* instr */
-#ifdef HAVE_TRACING
   XBT_LOG_CONNECT(instr);
   XBT_LOG_CONNECT(instr_api);
   XBT_LOG_CONNECT(instr_config);
@@ -615,7 +623,6 @@ static void xbt_log_connect_categories(void)
   XBT_LOG_CONNECT(instr_surf);
   XBT_LOG_CONNECT(instr_trace);
   XBT_LOG_CONNECT(instr_TI_trace);
-#endif
 
   /* jedule */
 #ifdef HAVE_JEDULE
@@ -632,9 +639,9 @@ static void xbt_log_connect_categories(void)
   XBT_LOG_CONNECT(mc_compare);
   XBT_LOG_CONNECT(mc_diff);
   XBT_LOG_CONNECT(mc_dwarf);
-  XBT_LOG_CONNECT(mc_global);
   XBT_LOG_CONNECT(mc_hash);
   XBT_LOG_CONNECT(mc_ignore);
+  XBT_LOG_CONNECT(mcer_ignore);
   XBT_LOG_CONNECT(mc_liveness);
   XBT_LOG_CONNECT(mc_memory);
   XBT_LOG_CONNECT(mc_memory_map);
@@ -642,7 +649,18 @@ static void xbt_log_connect_categories(void)
   XBT_LOG_CONNECT(mc_request);
   XBT_LOG_CONNECT(mc_safety);
   XBT_LOG_CONNECT(mc_visited);
+  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_RegionSnaphot);
+  XBT_LOG_CONNECT(mc_server);
+  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);
@@ -697,16 +715,8 @@ static void xbt_log_connect_categories(void)
   XBT_LOG_CONNECT(surf_lagrange_dichotomy);
   XBT_LOG_CONNECT(surf_maxmin);
   XBT_LOG_CONNECT(surf_network);
-#ifdef HAVE_GTNETS
-  XBT_LOG_CONNECT(surf_network_gtnets);
-  XBT_LOG_CONNECT(surf_network_gtnets_interface);
-  XBT_LOG_CONNECT(surf_network_gtnets_simulator);
-  XBT_LOG_CONNECT(surf_network_gtnets_topology);
-#endif
 #ifdef HAVE_NS3
-  XBT_LOG_CONNECT(surf_network_ns3);
-  XBT_LOG_CONNECT(interface_ns3);
-  XBT_LOG_CONNECT(simulator_ns3);
+  XBT_LOG_CONNECT(ns3);
 #endif
   XBT_LOG_CONNECT(surf_parse);
   XBT_LOG_CONNECT(surf_route);
@@ -721,8 +731,8 @@ static void xbt_log_connect_categories(void)
   XBT_LOG_CONNECT(surf_route_vivaldi);
   XBT_LOG_CONNECT(surf_storage);
   XBT_LOG_CONNECT(surf_trace);
-  XBT_LOG_CONNECT(surf_vm_workstation);
-  XBT_LOG_CONNECT(surf_workstation);
+  XBT_LOG_CONNECT(surf_vm);
+  XBT_LOG_CONNECT(surf_host);
 
 #endif /* simgrid_EXPORTS */
 }
@@ -1120,9 +1130,12 @@ static xbt_log_setting_t _xbt_log_parse_setting(const char *control_string)
     }
 
     if(i<XBT_LOG_STATIC_THRESHOLD){
-     THROWF(arg_error, 0,
-             "Priority: %s is above allowed priority : %s (for debug and trace levels, recompile SimGrid with -Denable_debug=ON)",
-             eq + 1, xbt_log_priority_names[XBT_LOG_STATIC_THRESHOLD]);
+     fprintf(stderr,
+                "Priority '%s' (in setting '%s') is above allowed priority '%s'.\n\n"
+                "Compiling SimGrid with -DNDEBUG forbids the levels 'trace' and 'debug'\n"
+                "while -DNLOG forbids any logging, at any level.",
+             eq + 1, name, xbt_log_priority_names[XBT_LOG_STATIC_THRESHOLD]);
+     exit(1);
     }else if (i < xbt_log_priority_infinite) {
       set->thresh = (e_xbt_log_priority_t) i;
     } else {