From 3a8e2482063363c58098e170e6a7c250f62c7711 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Fri, 19 Apr 2019 22:18:09 +0200 Subject: [PATCH 1/1] New log appenders stdout and stderr. Use stdout for xbt_help. --- ChangeLog | 1 + include/xbt/log.h | 2 ++ src/xbt/log.cpp | 8 ++++++-- src/xbt/xbt_log_appender_file.cpp | 27 +++++++++++++++++---------- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 862916ba47..951d936a71 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ SimGrid (3.23) NOT RELEASED (Release Target: June 21. 2019, 15:54 UTC) XBT: + - New log appenders: stdout and stderr. Use stdout for xbt_help. - Drop xbt_dict_dump. Fixed bugs (GH=GitHub; FG=FramaGit): diff --git a/include/xbt/log.h b/include/xbt/log.h index a65699c37e..1053dbf263 100644 --- a/include/xbt/log.h +++ b/include/xbt/log.h @@ -31,6 +31,7 @@ #include #include /* NULL */ +#include /* FILE */ #include SG_BEGIN_DECL() /**@brief Log priorities @@ -299,6 +300,7 @@ XBT_PUBLIC void xbt_log_additivity_set(xbt_log_category_t cat, int additivity); */ XBT_PUBLIC xbt_log_layout_t xbt_log_layout_simple_new(const char* arg); XBT_PUBLIC xbt_log_layout_t xbt_log_layout_format_new(const char* arg); +XBT_PUBLIC xbt_log_appender_t xbt_log_appender_stream(FILE* f); XBT_PUBLIC xbt_log_appender_t xbt_log_appender_file_new(const char* arg); XBT_PUBLIC xbt_log_appender_t xbt_log_appender2_file_new(const char* arg, int roll); diff --git a/src/xbt/log.cpp b/src/xbt/log.cpp index 7b1a327bc4..54722001d4 100644 --- a/src/xbt/log.cpp +++ b/src/xbt/log.cpp @@ -68,7 +68,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(log, xbt, "Loggings from the logging mechanism i which were already created (damnit. Too slow little beetle) */ void xbt_log_preinit(void) { - xbt_log_default_appender = xbt_log_appender_file_new(nullptr); + 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; @@ -88,7 +88,7 @@ void xbt_log_init(int *argc, char **argv) int j = 1; int parse_args = 1; // Stop parsing the parameters once we found '--' - xbt_log_control_set("xbt_help.threshold:VERBOSE xbt_help.fmt:%m%n"); + xbt_log_control_set("xbt_help.app:stdout xbt_help.threshold:VERBOSE xbt_help.fmt:%m%n"); /* Set logs and init log submodule */ for (int i = 1; i < *argc; i++) { @@ -421,6 +421,10 @@ static xbt_log_setting_t _xbt_log_parse_setting(const char *control_string) set.appender = xbt_log_appender2_file_new(value + 9, 1); } else if (strncmp(value, "splitfile:", 10) == 0) { set.appender = xbt_log_appender2_file_new(value + 10, 0); + } else if (strcmp(value, "stderr") == 0) { + set.appender = xbt_log_appender_stream(stderr); + } else if (strcmp(value, "stdout") == 0) { + set.appender = xbt_log_appender_stream(stdout); } else { THROWF(arg_error, 0, "Unknown appender log type: '%s'", value); } diff --git a/src/xbt/xbt_log_appender_file.cpp b/src/xbt/xbt_log_appender_file.cpp index 7d9a216a23..fbb0a88f55 100644 --- a/src/xbt/xbt_log_appender_file.cpp +++ b/src/xbt/xbt_log_appender_file.cpp @@ -17,23 +17,30 @@ static void append_file(xbt_log_appender_t this_, char *str) { fputs(str, (FILE *) this_->data); } -static void free_(xbt_log_appender_t this_) { - if (this_->data != stderr) - fclose(static_cast(this_->data)); +static void free_(xbt_log_appender_t this_) +{ + fclose(static_cast(this_->data)); +} + +xbt_log_appender_t xbt_log_appender_stream(FILE* f) +{ + xbt_log_appender_t res = xbt_new0(s_xbt_log_appender_t, 1); + res->do_append = &append_file; + res->free_ = nullptr; + res->data = static_cast(f); + return res; } xbt_log_appender_t xbt_log_appender_file_new(const char* arg) { + if (arg == nullptr) + return xbt_log_appender_stream(stderr); xbt_log_appender_t res = xbt_new0(s_xbt_log_appender_t, 1); res->do_append = &append_file; res->free_ = &free_; - if (arg) { - res->data = (void *) fopen(arg, "w"); - if (res->data == nullptr) - xbt_die("Cannot open file: %s: %s", arg, strerror(errno)); - } else { - res->data = (void *) stderr; - } + res->data = static_cast(fopen(arg, "w")); + if (res->data == nullptr) + xbt_die("Cannot open file: %s: %s", arg, strerror(errno)); return res; } -- 2.20.1