From 8a762701a2cdddc596e3dcfa65c8aae010c97599 Mon Sep 17 00:00:00 2001 From: mquinson Date: Tue, 5 Jun 2007 09:08:06 +0000 Subject: [PATCH] Better split of layouts and appenders in the logs (let's not stick to the weirdness of LOG4J) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@3557 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/xbt/log.c | 46 ++++++++++++++++++++++++--------- src/xbt/xbt_log_appender_file.c | 3 +-- src/xbt/xbt_log_layout_simple.c | 2 +- 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/xbt/log.c b/src/xbt/log.c index 1e63f7a989..b1d788b4da 100644 --- a/src/xbt/log.c +++ b/src/xbt/log.c @@ -342,6 +342,7 @@ 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 */ typedef struct { char *catname; @@ -391,9 +392,10 @@ void xbt_log_init(int *argc,char **argv) { /* 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(xbt_log_layout_simple_new()); + 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; /* Set logs and init log submodule */ for (i=1; i<*argc; i++){ @@ -425,16 +427,15 @@ static void log_cat_exit(xbt_log_category_t cat) { xbt_log_category_t child; if (cat->appender) { - if (cat->appender->layout) { - if (cat->appender->layout->free_) - cat->appender->layout->free_(cat->appender->layout); - free(cat->appender->layout); - } if (cat->appender->free_) cat->appender->free_(cat->appender); free(cat->appender); } - + if (cat->layout) { + if (cat->layout->free_) + cat->layout->free_(cat->layout); + free(cat->layout); + } for(child=cat->firstChild ; child != NULL; child = child->nextSibling) log_cat_exit(child); @@ -455,9 +456,8 @@ void _xbt_log_event_log( xbt_log_event_t ev, const char *fmt, ...) { while(1) { xbt_log_appender_t appender = cat->appender; if (appender != NULL) { - xbt_assert1(appender->layout,"No valid layout for the appender of category %s",cat->name); - char *str= appender->layout->do_layout(appender->layout, - ev, fmt); + xbt_assert1(cat->layout,"No valid layout for the appender of category %s",cat->name); + char *str= cat->layout->do_layout(cat->layout, ev, fmt); appender->do_append(appender, str); } if (!cat->additivity) @@ -483,6 +483,7 @@ int _xbt_log_cat_init(xbt_log_category_t category, 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 { if (!category->parent) @@ -716,13 +717,15 @@ void xbt_log_control_set(const char* control_string) { _free_setting); /* split the string, and remove empty entries */ - set_strings=xbt_str_split(control_string," "); + set_strings=xbt_str_split_quoted(control_string); +#ifdef FIXME xbt_dynar_foreach(set_strings,cpt,str) { xbt_str_trim(str,NULL); if (str[0]=='\0') { xbt_dynar_cursor_rm(set_strings,&cpt); } } +#endif if (xbt_dynar_length(set_strings) == 0) { /* vicious user! */ xbt_dynar_free(&set_strings); @@ -763,8 +766,27 @@ void xbt_log_control_set(const char* control_string) { } 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); + free(cat->appender); + } cat->appender = app; } +void xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay) { + if (!cat->appender) { + WARN1("No appender to category %s. Setting the file appender as default", + cat->name); + xbt_log_appender_set(cat,xbt_log_appender_file_new(NULL)); + } + if (cat->layout) { + if (cat->layout->free_) { + cat->layout->free_(cat->layout); + free(cat->layout); + } + } + cat->layout = lay; +} void xbt_log_additivity_set(xbt_log_category_t cat, int additivity) { cat->additivity = additivity; diff --git a/src/xbt/xbt_log_appender_file.c b/src/xbt/xbt_log_appender_file.c index 0ccca3515f..c63b7240ab 100644 --- a/src/xbt/xbt_log_appender_file.c +++ b/src/xbt/xbt_log_appender_file.c @@ -24,9 +24,8 @@ static void append_file(xbt_log_appender_t this_appender, fprintf((FILE*)(this_appender->data), str); } -xbt_log_appender_t xbt_log_appender_file_new(xbt_log_layout_t lout){ +xbt_log_appender_t xbt_log_appender_file_new(char *arg){ xbt_log_appender_t res = xbt_new0(s_xbt_log_appender_t,1); - res->layout = lout; res->do_append = append_file; res->free_ = NULL; res->data = (void*)stderr; diff --git a/src/xbt/xbt_log_layout_simple.c b/src/xbt/xbt_log_layout_simple.c index ec68d8b6d4..f13017db4b 100644 --- a/src/xbt/xbt_log_layout_simple.c +++ b/src/xbt/xbt_log_layout_simple.c @@ -59,7 +59,7 @@ static char *xbt_log_layout_simple_doit(xbt_log_layout_t l, return res; } -xbt_log_layout_t xbt_log_layout_simple_new() { +xbt_log_layout_t xbt_log_layout_simple_new(char *arg) { xbt_log_layout_t res = xbt_new0(s_xbt_log_layout_t,1); res->do_layout = xbt_log_layout_simple_doit; return res; -- 2.20.1