X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/83f0364920918d0380a5d538216193bfe00ddc47..f86afb2f9ce9ffb20109178776980aa665c79c2f:/src/xbt/log.cpp diff --git a/src/xbt/log.cpp b/src/xbt/log.cpp index 61f476fa7f..d21ea0e07b 100644 --- a/src/xbt/log.cpp +++ b/src/xbt/log.cpp @@ -1,6 +1,6 @@ /* log - a generic logging facility in the spirit of log4j */ -/* Copyright (c) 2004-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2004-2023. 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. */ @@ -8,7 +8,6 @@ #include "src/xbt/log_private.hpp" #include "xbt/string.hpp" #include "xbt/sysdep.h" -#include "xbt/xbt_modinter.h" #include #include @@ -19,10 +18,6 @@ #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; - -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 */ struct xbt_log_setting_t { std::string catname; @@ -58,19 +53,9 @@ s_xbt_log_category_t _XBT_LOGV(XBT_LOG_ROOT_CAT) = { 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_stream(stderr); - xbt_log_default_layout = xbt_log_layout_simple_new(nullptr); - _XBT_LOGV(XBT_LOG_ROOT_CAT).appender = xbt_log_default_appender; - _XBT_LOGV(XBT_LOG_ROOT_CAT).layout = xbt_log_default_layout; - log_cat_init_mutex = new std::recursive_mutex(); -} - static void xbt_log_help(); static void xbt_log_help_categories(); +static void xbt_log_postexit(); void xbt_log_init(int *argc, char **argv) { @@ -79,6 +64,7 @@ void xbt_log_init(int *argc, char **argv) int parse_args = 1; // Stop parsing the parameters once we found '--' xbt_log_control_set("xbt_help.app:stdout xbt_help.threshold:VERBOSE xbt_help.fmt:%m%n"); + atexit(xbt_log_postexit); /* Set logs and init log submodule */ for (int i = 1; i < *argc; i++) { @@ -112,27 +98,29 @@ void xbt_log_init(int *argc, char **argv) } } -static void log_cat_exit(const s_xbt_log_category_t* cat) +static void log_cat_exit(xbt_log_category_t cat) { if (cat->appender) { if (cat->appender->free_) cat->appender->free_(cat->appender); xbt_free(cat->appender); + cat->appender = nullptr; } if (cat->layout) { if (cat->layout->free_) cat->layout->free_(cat->layout); xbt_free(cat->layout); + cat->layout = nullptr; } - for (auto const* child = cat->firstChild; child != nullptr; child = child->nextSibling) + for (auto* child = cat->firstChild; child != nullptr; child = child->nextSibling) log_cat_exit(child); + cat->firstChild = nullptr; } -void xbt_log_postexit(void) +static void xbt_log_postexit(void) { XBT_VERB("Exiting log"); - delete log_cat_init_mutex; log_cat_exit(&_XBT_LOGV(XBT_LOG_ROOT_CAT)); } @@ -151,9 +139,7 @@ void _xbt_log_event_log(xbt_log_event_t ev, const char *fmt, ...) "Priority %d is greater than the biggest allowed value", ev->priority); while (true) { - const s_xbt_log_appender_t* appender = cat->appender; - - if (appender != nullptr) { + if (const s_xbt_log_appender_t* appender = cat->appender) { xbt_assert(cat->layout, "No valid layout for the appender of category %s", cat->name); /* First, try with a static buffer */ @@ -185,7 +171,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; } @@ -205,7 +191,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 + XBT_ATTRIB_UNUSED int (*_xbt_log_cat_init)(xbt_log_category_t, e_xbt_log_priority_t) = fake_xbt_log_cat_init static void _xbt_log_cat_apply_set(xbt_log_category_t category, const xbt_log_setting_t& setting) { @@ -231,7 +217,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); @@ -248,8 +234,8 @@ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority if (category->initialized) return priority >= category->threshold; - if (log_cat_init_mutex != nullptr) - log_cat_init_mutex->lock(); + static std::recursive_mutex log_cat_init_mutex; + const std::scoped_lock lock(log_cat_init_mutex); XBT_DEBUG("Initializing category '%s' (firstChild=%s, nextSibling=%s)", category->name, (category->firstChild ? category->firstChild->name : "none"), @@ -257,10 +243,10 @@ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority if (category == &_XBT_LOGV(XBT_LOG_ROOT_CAT)) { category->threshold = xbt_log_priority_info; - category->appender = xbt_log_default_appender; - category->layout = xbt_log_default_layout; + category->appender = xbt_log_appender_stream(stderr); + category->layout = xbt_log_layout_simple_new(nullptr); } 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, @@ -282,9 +268,9 @@ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority } /* Apply the control */ - auto iset = std::find_if(begin(xbt_log_settings()), end(xbt_log_settings()), - [category](const xbt_log_setting_t& s) { return s.catname == category->name; }); - if (iset != xbt_log_settings().end()) { + if (auto iset = std::find_if(begin(xbt_log_settings()), end(xbt_log_settings()), + [category](const xbt_log_setting_t& s) { return s.catname == category->name; }); + iset != xbt_log_settings().end()) { _xbt_log_cat_apply_set(category, *iset); xbt_log_settings().erase(iset); } else { @@ -293,8 +279,6 @@ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority } category->initialized = 1; - if (log_cat_init_mutex != nullptr) - log_cat_init_mutex->unlock(); return priority >= category->threshold; } @@ -320,8 +304,8 @@ void xbt_log_parent_set(xbt_log_category_t cat, xbt_log_category_t parent) parent->firstChild = cat; - if (!parent->initialized) - _xbt_log_cat_init(parent, xbt_log_priority_uninitialized /* ignored */ ); + if (not parent->initialized) + (void)_xbt_log_cat_init(parent, xbt_log_priority_uninitialized /* ignored */); cat->threshold = parent->threshold; @@ -356,7 +340,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); @@ -413,7 +397,7 @@ static xbt_log_setting_t _xbt_log_parse_setting(const char *control_string) throw std::invalid_argument(simgrid::xbt::string_printf("Unknown appender log type: '%s'", value)); } } else if (strncmp(option, "fmt", option_len) == 0) { - set.fmt = std::string(value); + set.fmt = value; } else { xbt_die("Unknown setting of the log category: '%.*s'", static_cast(option_len), option); } @@ -444,7 +428,7 @@ static xbt_log_category_t _xbt_log_cat_searchsub(xbt_log_category_t cat, const c void xbt_log_control_set(const char *control_string) { - if (!control_string) + if (not control_string) return; XBT_DEBUG("Parse log settings '%s'", control_string); @@ -489,7 +473,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)); } @@ -547,10 +531,8 @@ static void xbt_log_help() " -> %%L: line number where the log event was raised (LOG4J compatible)\n" " -> %%M: function name (LOG4J compatible -- called method name here of course).\n" "\n" - " -> %%b: full backtrace (Called %%throwable in LOG4J). Defined only under windows or when using the " - "GNU libc because\n" - " backtrace() is not defined elsewhere, and we only have a fallback for windows boxes, not " - "mac ones for example.\n" + " -> %%b: full backtrace (Called %%throwable in LOG4J). Defined only when using the GNU libc because\n" + " backtrace() is not defined elsewhere.\n" " -> %%B: short backtrace (only the first line of the %%b). Called %%throwable{short} in LOG4J; " "defined where %%b is.\n" "\n" @@ -575,7 +557,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);