X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/27ea8d78c124dd6b7cdb649b8d2bb95dc16f4cde..0199ba108d66c94df94e4f044994e79efdece4b1:/src/xbt/log.cpp diff --git a/src/xbt/log.cpp b/src/xbt/log.cpp index fa02f97812..93ed95f57e 100644 --- a/src/xbt/log.cpp +++ b/src/xbt/log.cpp @@ -6,27 +6,21 @@ * 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 #include 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 */ @@ -45,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) = { @@ -78,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 */ @@ -195,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; } @@ -215,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) { @@ -241,23 +231,13 @@ 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); } } -/** Asserts that the provided name is unique */ -void _xbt_log_is_name_unique(const char* name, const char* file, int line) -{ - static std::unordered_set used_names; - - if (used_names.find(name) != used_names.end()) - XBT_WARN("%s:%d: log category redefined: %s", file, line, name); - used_names.insert(std::string(name)); -} - /* * This gets called the first time a category is referenced and performs the initialization. * Also resets threshold to inherited! @@ -265,7 +245,6 @@ void _xbt_log_is_name_unique(const char* name, const char* file, int line) int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority) { DISABLE_XBT_LOG_CAT_INIT(); - if (category->initialized) return priority >= category->threshold; @@ -281,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, @@ -341,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; @@ -377,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); @@ -463,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); @@ -498,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) { @@ -520,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) @@ -536,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)); } @@ -584,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" @@ -622,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);