X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a9b94bc9be0c3ad5b5f816bf343152a3617a1bc2..89977d794cd93842c820c99139fe4e1c04f00175:/src/xbt/log.c
diff --git a/src/xbt/log.c b/src/xbt/log.c
index b532cb0260..0ed94a9a4a 100644
--- a/src/xbt/log.c
+++ b/src/xbt/log.c
@@ -18,14 +18,12 @@
#include "xbt/error.h"
#include "xbt/dynar.h"
-
-/** \defgroup XBT_log Logging support.
- * \brief A generic logging facility in the spirit of log4j
+/** \addtogroup XBT_log
*
* This section describes the API to the log functions used
* everywhere in this project.
-
Overview
+\section log_overview Overview
This is an adaptation of the log4c project, which is dead upstream, and
which I was given the permission to fork under the LGPL licence by the
@@ -37,7 +35,7 @@ concepts work together to enable developers to log messages according to
message type and priority, and to control at runtime how these messages are
formatted and where they are reported.
-Category hierarchy
+\section log_cat Category hierarchy
The first and foremost advantage of any logging API over plain printf()
resides in its ability to disable certain log statements while allowing
@@ -71,7 +69,9 @@ definition.
Typically, there will be a Category for each module and sub-module, so you
can independently control logging for each module.
-Priority
+For a list of all existing categories, please refer to the \ref XBT_log_cats section.
+
+\section log_pri Priority
A category may be assigned a threshold priorty. The set of priorites are
defined by the \ref e_xbt_log_priority_t enum. All logging request under
@@ -110,7 +110,7 @@ equivalent to the shorter:
CWARN4(MyCat, "Values are: %d and '%s'", 5, "oops");
-Default category
+\subsection log_subcat Using a default category
If \ref XBT_LOG_NEW_DEFAULT_SUBCATEGORY(MyCat, Parent) or
\ref XBT_LOG_NEW_DEFAULT_CATEGORY(MyCat) is used to create the
@@ -121,7 +121,7 @@ category, then the even shorter form can be used:
Only one default category can be created per file, though multiple
non-defaults can be created and used.
-Example
+\section log_example Example
Here is a more complete example:
@@ -151,7 +151,7 @@ int main() {
}
\endverbatim
-Configuration
+\section log_conf Configuration
Configuration is typically done during program initialization by invoking
the xbt_log_control_set() method. The control string passed to it typically
comes from the command line. Look at the documentation for that function for
@@ -162,7 +162,7 @@ Any SimGrid program can furthermore be configured at run time by passing a
--surf-log are synonyms). You can provide several of those arguments to
change the setting of several categories.
-Performance
+\section log_perf Performance
Clever design insures efficiency. Except for the first invocation, a
disabled logging request requires an a single comparison of a static
@@ -174,8 +174,12 @@ by the compiler. By setting it to gras_log_priority_infinite, all logging
requests are statically disabled and cost nothing. Released executables
might be compiled with
\verbatim-DXBT_LOG_STATIC_THRESHOLD=gras_log_priority_infinite\endverbatim
-
-Appenders
+
+Compiling with the \verbatim-DNLOG\endverbatim option disables all logging
+requests at compilation time while the \verbatim-DNDEBUG\endverbatim disables
+the requests of priority below INFO.
+
+\section log_app Appenders
Each category has an optional appender. An appender is a pointer to a
structure which starts with a pointer to a doAppend() function. DoAppend()
@@ -199,15 +203,13 @@ remote dedicated server, or other ones offering different output formats.
This is on our TODO list for quite a while now, but your help would be
welcome here.
-Misc and Caveats
-
-Do not use any of the macros that start with '_'.
-
-Log4J has a 'rolling file appender' which you can select with a run-time
-option and specify the max file size. This would be a nice default for
-non-kernel applications.
+\section log_misc Misc and Caveats
-Careful, category names are global variables.
+ - Do not use any of the macros that start with '_'.
+ - Log4J has a 'rolling file appender' which you can select with a run-time
+ option and specify the max file size. This would be a nice default for
+ non-kernel applications.
+ - Careful, category names are global variables.
*/
@@ -320,8 +322,8 @@ static xbt_dynar_t xbt_log_settings=NULL;
static void _free_setting(void *s) {
xbt_log_setting_t set=(xbt_log_setting_t)s;
if (set) {
- xbt_free(set->catname);
-/* xbt_free(set); FIXME: uncommenting this leads to segfault when more than one chunk is passed as gras-log */
+ free(set->catname);
+/* free(set); FIXME: uncommenting this leads to segfault when more than one chunk is passed as gras-log */
}
}
@@ -342,16 +344,17 @@ s_xbt_log_category_t _XBT_LOGV(XBT_LOG_ROOT_CAT) = {
NULL, 0
};
-XBT_LOG_NEW_SUBCATEGORY(xbt,XBT_LOG_ROOT_CAT,"All XBT categories (simgrid toolbox)");
-XBT_LOG_NEW_SUBCATEGORY(surf,XBT_LOG_ROOT_CAT,"All SURF categories");
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(log,xbt,"Loggings from the logging mecanism itself");
+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_DEFAULT_SUBCATEGORY(log,xbt,"Loggings from the logging mechanism itself");
void xbt_log_init(int *argc,char **argv, const char *defaultlog) {
int i,j;
char *opt;
int found=0;
- /** Set logs and init log submodule */
+ /* Set logs and init log submodule */
for (i=1; i<*argc; i++) {
if (!strncmp(argv[i],"--gras-log=",strlen("--gras-log=")) ||
!strncmp(argv[i],"--surf-log=",strlen("--surf-log=")) ||
@@ -557,7 +560,7 @@ static void _xbt_log_parse_setting(const char* control_string,
} else {
xbt_assert1(FALSE,"Unknown priority name: %s",eq+1);
}
- xbt_free(neweq);
+ free(neweq);
} else {
char buff[512];
snprintf(buff,min(512,eq - dot - 1),"%s",dot+1);
@@ -678,12 +681,12 @@ void xbt_log_control_set(const char* control_string) {
set = xbt_new(s_xbt_log_setting_t,1);
} else {
DEBUG0("Apply directly");
- xbt_free(set->catname);
+ free(set->catname);
xbt_log_threshold_set(cat,set->thresh);
}
}
- xbt_free(set);
- xbt_free(cs);
+ free(set);
+ free(cs);
}
void xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t app) {