X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4a201b7ceece70d2bc461ac48c8b746a36d07243..1c58c7eb479e43cda12185a87ee07ef4d1ed3dc4:/src/xbt/log.c diff --git a/src/xbt/log.c b/src/xbt/log.c index 79d27c1de5..31b809ffe1 100644 --- a/src/xbt/log.c +++ b/src/xbt/log.c @@ -1,6 +1,7 @@ /* 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. */ @@ -268,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 @@ -467,7 +468,6 @@ welcome here, too. 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; @@ -516,28 +516,29 @@ 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"); +/* 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) -{ +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 */ /* Set logs and init log submodule */ @@ -590,26 +591,17 @@ static void log_cat_exit(xbt_log_category_t cat) 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, ...) { 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); @@ -629,85 +621,59 @@ 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 } +/* 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! + */ + static void _xbt_log_cat_apply_set(xbt_log_category_t category, xbt_log_setting_t setting) { - - s_xbt_log_event_t _log_ev; +#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); - } + 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")); - } + 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); - } + DEBUG2("Set %p as appender of category '%s'", + setting->appender, category->name); } +#undef _xbt_log_cat_init } /* @@ -718,26 +684,16 @@ static void _xbt_log_cat_apply_set(xbt_log_category_t category, int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority) { +#define _xbt_log_cat_init(a, b) (0) + unsigned int cursor; 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")); - } + + 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; @@ -749,21 +705,14 @@ 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) { + if (XBT_LOG_ISENABLED(log, xbt_log_priority_debug)) { char *buf, *res = NULL; xbt_log_category_t cpp = category->parent->firstChild; while (cpp) { @@ -777,12 +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); } @@ -811,22 +758,14 @@ int _xbt_log_cat_init(xbt_log_category_t category, } } - 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)