X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9304dfd37fe98984bb8b1ae13a107438ed44189f..b98e2e68753ffbe791c52a3f698fb1a3e726daec:/src/xbt/log.cpp diff --git a/src/xbt/log.cpp b/src/xbt/log.cpp index 4819878dfb..93ed95f57e 100644 --- a/src/xbt/log.cpp +++ b/src/xbt/log.cpp @@ -6,14 +6,14 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "src/xbt/log_private.hpp" -#include "src/xbt_modinter.h" -#include "xbt/asserts.h" -#include "xbt/dynar.h" -#include "xbt/str.h" #include "xbt/string.hpp" +#include "xbt/sysdep.h" +#include "xbt/xbt_modinter.h" #include #include +#include +#include #include #include #include @@ -21,11 +21,6 @@ int xbt_log_no_loc = 0; /* if set to true (with --log=no_loc), file localization will be omitted (for tesh tests) */ static std::recursive_mutex* log_cat_init_mutex = nullptr; -/** @addtogroup XBT_log - * - * For more information, please refer to @ref outcomes_logs Section. - */ - xbt_log_appender_t xbt_log_default_appender = nullptr; /* set in log_init */ xbt_log_layout_t xbt_log_default_layout = nullptr; /* set in log_init */ @@ -44,7 +39,7 @@ static auto& xbt_log_settings() return value; } -constexpr std::array xbt_log_priority_names{ +constexpr std::array xbt_log_priority_names{ {"NONE", "TRACE", "DEBUG", "VERBOSE", "INFO", "WARNING", "ERROR", "CRITICAL"}}; s_xbt_log_category_t _XBT_LOGV(XBT_LOG_ROOT_CAT) = { @@ -77,10 +72,6 @@ void xbt_log_preinit(void) static void xbt_log_help(); static void xbt_log_help_categories(); -/** @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) { unsigned help_requested = 0; /* 1: logs; 2: categories */ @@ -194,7 +185,7 @@ void _xbt_log_event_log(xbt_log_event_t ev, const char *fmt, ...) } } - if (!cat->additivity) + if (not cat->additivity) break; cat = cat->parent; } @@ -214,7 +205,7 @@ static int fake_xbt_log_cat_init(xbt_log_category_t, e_xbt_log_priority_t) return 0; } #define DISABLE_XBT_LOG_CAT_INIT() \ - int (*_xbt_log_cat_init)(xbt_log_category_t, e_xbt_log_priority_t) XBT_ATTRIB_UNUSED = fake_xbt_log_cat_init; + int (*_xbt_log_cat_init)(xbt_log_category_t, e_xbt_log_priority_t) XBT_ATTRIB_UNUSED = fake_xbt_log_cat_init static void _xbt_log_cat_apply_set(xbt_log_category_t category, const xbt_log_setting_t& setting) { @@ -240,7 +231,7 @@ static void _xbt_log_cat_apply_set(xbt_log_category_t category, const xbt_log_se } if (setting.appender) { xbt_log_appender_set(category, setting.appender); - if (!category->layout) + if (not category->layout) xbt_log_layout_set(category, xbt_log_layout_simple_new(nullptr)); category->additivity = 0; XBT_DEBUG("Set %p as appender of category '%s'", setting.appender, category->name); @@ -269,7 +260,7 @@ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority category->appender = xbt_log_default_appender; category->layout = xbt_log_default_layout; } else { - if (!category->parent) + if (not category->parent) category->parent = &_XBT_LOGV(XBT_LOG_ROOT_CAT); XBT_DEBUG("Set %s (%s) as father of %s ", category->parent->name, @@ -329,7 +320,7 @@ void xbt_log_parent_set(xbt_log_category_t cat, xbt_log_category_t parent) parent->firstChild = cat; - if (!parent->initialized) + if (not parent->initialized) _xbt_log_cat_init(parent, xbt_log_priority_uninitialized /* ignored */ ); cat->threshold = parent->threshold; @@ -365,7 +356,7 @@ static xbt_log_setting_t _xbt_log_parse_setting(const char *control_string) const char *orig_control_string = control_string; xbt_log_setting_t set; - if (!*control_string) + if (not*control_string) return set; XBT_DEBUG("Parse log setting '%s'", control_string); @@ -451,33 +442,9 @@ static xbt_log_category_t _xbt_log_cat_searchsub(xbt_log_category_t cat, const c return nullptr; } -/** - * @ingroup XBT_log - * @param control_string What to parse - * - * Typically passed a command-line argument. The string has the syntax: - * - * ( [category] "." [keyword] ":" value (" ")... )... - * - * where [category] is one the category names (see @ref XBT_log_cats for a complete list of the ones defined in the - * SimGrid library) and keyword is one of the following: - * - * - thres: category's threshold priority. Possible values: - * TRACE,DEBUG,VERBOSE,INFO,WARNING,ERROR,CRITICAL - * - add or additivity: whether the logging actions must be passed to the parent category. - * Possible values: 0, 1, no, yes, on, off. - * Default value: yes. - * - fmt: the format to use. See @ref log_use_conf_fmt for more information. - * - app or appender: the appender to use. See @ref log_use_conf_app for more information. - */ void xbt_log_control_set(const char *control_string) { - /* To split the string in commands, and the cursors */ - xbt_dynar_t set_strings; - char *str; - unsigned int cpt; - - if (!control_string) + if (not control_string) return; XBT_DEBUG("Parse log settings '%s'", control_string); @@ -486,17 +453,16 @@ void xbt_log_control_set(const char *control_string) xbt_log_no_loc = 1; return; } - /* split the string, and remove empty entries */ - set_strings = xbt_str_split_quoted(control_string); - - if (xbt_dynar_is_empty(set_strings)) { /* 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_setting_t set = _xbt_log_parse_setting(str); + /* Split the string, and remove empty entries + Parse each entry and either use it right now (if the category was already created), or store it for further use */ + std::string parsed_control_string(control_string); + boost::escaped_list_separator sep("\\", " ", "\"'"); + boost::tokenizer> tok(parsed_control_string, sep); + for (const auto& str : tok) { + if (str.empty()) + continue; + + xbt_log_setting_t set = _xbt_log_parse_setting(str.c_str()); xbt_log_category_t cat = _xbt_log_cat_searchsub(&_XBT_LOGV(XBT_LOG_ROOT_CAT), set.catname.c_str()); if (cat) { @@ -508,7 +474,6 @@ void xbt_log_control_set(const char *control_string) xbt_log_settings().emplace_back(std::move(set)); } } - xbt_dynar_free(&set_strings); } void xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t app) @@ -524,7 +489,7 @@ void xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t app) void xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay) { DISABLE_XBT_LOG_CAT_INIT(); - if (!cat->appender) { + if (not cat->appender) { XBT_VERB ("No appender to category %s. Setting the file appender as default", cat->name); xbt_log_appender_set(cat, xbt_log_appender_file_new(nullptr)); } @@ -572,7 +537,7 @@ static void xbt_log_help() " -> %%p: Priority name (LOG4J compatible)\n" "\n" " -> %%h: Hostname (SimGrid extension)\n" - " -> %%P: Process name (SimGrid extension)\n" + " -> %%a: Actor name (SimGrid extension)\n" " -> %%t: Thread \"name\" (LOG4J compatible -- actually the address of the thread in memory)\n" " -> %%i: Process PID (SimGrid extension -- this is a 'i' as in 'i'dea)\n" "\n" @@ -610,7 +575,7 @@ static void xbt_log_help() static void xbt_log_help_categories_rec(xbt_log_category_t category, const std::string& prefix) { - if (!category) + if (not category) return; std::string this_prefix(prefix);