X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4024370d45f2edcea4b65e9414fcb8d99a31d443..9b3780913f771e32ac6686a7f97b1a8248f11b27:/src/xbt/log.c diff --git a/src/xbt/log.c b/src/xbt/log.c index 04772a3afa..7853627699 100644 --- a/src/xbt/log.c +++ b/src/xbt/log.c @@ -1,6 +1,6 @@ /* log - a generic logging facility in the spirit of log4j */ -/* Copyright (c) 2004-2017. The SimGrid Team. +/* Copyright (c) 2004-2018. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -24,6 +24,13 @@ #include "xbt/sysdep.h" #include "xbt/xbt_os_thread.h" +#ifndef MIN +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif +#ifndef MAX +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif + int xbt_log_no_loc = 0; /* if set to true (with --log=no_loc), file localization will be omitted (for tesh tests) */ static xbt_os_mutex_t log_cat_init_mutex = NULL; @@ -92,182 +99,6 @@ void xbt_log_preinit(void) log_cat_init_mutex = xbt_os_mutex_init(); } -static void xbt_log_connect_categories(void) -{ - /* Connect our log channels: that must be done manually under windows */ - /* Also permit that they are correctly listed by xbt_log_help_categories() */ - - /* xbt */ - XBT_LOG_CONNECT(xbt); - XBT_LOG_CONNECT(log); - XBT_LOG_CONNECT(module); - XBT_LOG_CONNECT(replay); - XBT_LOG_CONNECT(xbt_cfg); - XBT_LOG_CONNECT(xbt_dict); - XBT_LOG_CONNECT(xbt_dict_cursor); - XBT_LOG_CONNECT(xbt_dict_elm); - XBT_LOG_CONNECT(xbt_dyn); - XBT_LOG_CONNECT(xbt_ex); - XBT_LOG_CONNECT(xbt_backtrace); - XBT_LOG_CONNECT(xbt_exception); - XBT_LOG_CONNECT(xbt_graph); - XBT_LOG_CONNECT(xbt_heap); - XBT_LOG_CONNECT(xbt_mallocator); - XBT_LOG_CONNECT(xbt_memory_map); - XBT_LOG_CONNECT(xbt_parmap); - XBT_LOG_CONNECT(xbt_sync); - XBT_LOG_CONNECT(xbt_sync_os); - -#ifdef simgrid_EXPORTS - /* The following categories are only defined in libsimgrid */ - - /* bindings */ -#if SIMGRID_HAVE_LUA - XBT_LOG_CONNECT(lua); - XBT_LOG_CONNECT(lua_host); - XBT_LOG_CONNECT(lua_platf); - XBT_LOG_CONNECT(lua_debug); -#endif - - /* instr */ - XBT_LOG_CONNECT(instr); - XBT_LOG_CONNECT(instr_api); - XBT_LOG_CONNECT(instr_config); - XBT_LOG_CONNECT(instr_msg); - XBT_LOG_CONNECT(instr_msg_process); - XBT_LOG_CONNECT(instr_paje_containers); - XBT_LOG_CONNECT(instr_paje_header); - XBT_LOG_CONNECT(instr_paje_trace); - XBT_LOG_CONNECT(instr_paje_types); - XBT_LOG_CONNECT(instr_paje_values); - XBT_LOG_CONNECT(instr_resource); - XBT_LOG_CONNECT(instr_routing); - XBT_LOG_CONNECT(instr_surf); - - /* jedule */ -#if SIMGRID_HAVE_JEDULE - XBT_LOG_CONNECT(jedule); - XBT_LOG_CONNECT(jed_sd); -#endif - - /* mc */ -#if SIMGRID_HAVE_MC - XBT_LOG_CONNECT(mc); - XBT_LOG_CONNECT(mc_checkpoint); - XBT_LOG_CONNECT(mc_comm_determinism); - XBT_LOG_CONNECT(mc_compare); - XBT_LOG_CONNECT(mc_dwarf); - XBT_LOG_CONNECT(mc_hash); - XBT_LOG_CONNECT(mc_liveness); - XBT_LOG_CONNECT(mc_memory); - XBT_LOG_CONNECT(mc_page_snapshot); - XBT_LOG_CONNECT(mc_request); - XBT_LOG_CONNECT(mc_safety); - XBT_LOG_CONNECT(mc_VisitedState); - XBT_LOG_CONNECT(mc_client); - XBT_LOG_CONNECT(mc_client_api); - XBT_LOG_CONNECT(mc_comm_pattern); - XBT_LOG_CONNECT(mc_process); - XBT_LOG_CONNECT(mc_protocol); - XBT_LOG_CONNECT(mc_Channel); - XBT_LOG_CONNECT(mc_ModelChecker); - XBT_LOG_CONNECT(mc_RegionSnaphot); - XBT_LOG_CONNECT(mc_Session); - XBT_LOG_CONNECT(mc_state); -#endif - XBT_LOG_CONNECT(mc_global); - XBT_LOG_CONNECT(mc_config); - XBT_LOG_CONNECT(mc_record); - - /* msg */ - XBT_LOG_CONNECT(msg); - XBT_LOG_CONNECT(msg_action); - XBT_LOG_CONNECT(msg_gos); - XBT_LOG_CONNECT(msg_io); - XBT_LOG_CONNECT(msg_kernel); - XBT_LOG_CONNECT(msg_mailbox); - XBT_LOG_CONNECT(msg_process); - XBT_LOG_CONNECT(msg_synchro); - XBT_LOG_CONNECT(msg_task); - XBT_LOG_CONNECT(msg_vm); - - /* s4u */ - XBT_LOG_CONNECT(s4u); - XBT_LOG_CONNECT(s4u_activity); - XBT_LOG_CONNECT(s4u_actor); - XBT_LOG_CONNECT(s4u_netzone); - XBT_LOG_CONNECT(s4u_channel); - XBT_LOG_CONNECT(s4u_comm); - XBT_LOG_CONNECT(s4u_file); - XBT_LOG_CONNECT(s4u_link); - XBT_LOG_CONNECT(s4u_vm); - - /* sg */ - XBT_LOG_CONNECT(sg_host); - - /* simdag */ - XBT_LOG_CONNECT(sd); - XBT_LOG_CONNECT(sd_daxparse); -#if HAVE_GRAPHVIZ - XBT_LOG_CONNECT(sd_dotparse); -#endif - XBT_LOG_CONNECT(sd_kernel); - XBT_LOG_CONNECT(sd_task); - - /* simix */ - XBT_LOG_CONNECT(simix); - XBT_LOG_CONNECT(simix_context); - XBT_LOG_CONNECT(simix_deployment); - XBT_LOG_CONNECT(simix_environment); - XBT_LOG_CONNECT(simix_host); - XBT_LOG_CONNECT(simix_io); - XBT_LOG_CONNECT(simix_kernel); - XBT_LOG_CONNECT(simix_mailbox); - XBT_LOG_CONNECT(simix_network); - XBT_LOG_CONNECT(simix_process); - XBT_LOG_CONNECT(simix_popping); - XBT_LOG_CONNECT(simix_synchro); - - /* smpi */ - /* SMPI categories are connected in smpi_global.c */ - - /* surf */ - XBT_LOG_CONNECT(surf); - XBT_LOG_CONNECT(surf_config); - XBT_LOG_CONNECT(surf_cpu); - XBT_LOG_CONNECT(surf_cpu_cas); - XBT_LOG_CONNECT(surf_cpu_ti); - XBT_LOG_CONNECT(surf_energy); - XBT_LOG_CONNECT(surf_file); - XBT_LOG_CONNECT(surf_kernel); - XBT_LOG_CONNECT(surf_lagrange); - XBT_LOG_CONNECT(surf_lagrange_dichotomy); - XBT_LOG_CONNECT(surf_maxmin); - XBT_LOG_CONNECT(surf_network); -#if SIMGRID_HAVE_NS3 - XBT_LOG_CONNECT(ns3); -#endif - XBT_LOG_CONNECT(surf_parse); - XBT_LOG_CONNECT(surf_plugin_load); - XBT_LOG_CONNECT(surf_route); - XBT_LOG_CONNECT(surf_routing_generic); - XBT_LOG_CONNECT(surf_route_cluster); - XBT_LOG_CONNECT(surf_route_cluster_torus); - XBT_LOG_CONNECT(surf_route_cluster_dragonfly); - XBT_LOG_CONNECT(surf_route_dijkstra); - XBT_LOG_CONNECT(surf_route_fat_tree); - XBT_LOG_CONNECT(surf_route_floyd); - XBT_LOG_CONNECT(surf_route_full); - XBT_LOG_CONNECT(surf_route_none); - XBT_LOG_CONNECT(surf_route_vivaldi); - XBT_LOG_CONNECT(surf_storage); - XBT_LOG_CONNECT(surf_trace); - XBT_LOG_CONNECT(surf_vm); - XBT_LOG_CONNECT(surf_host); - -#endif /* simgrid_EXPORTS */ -} - static void xbt_log_help(void); static void xbt_log_help_categories(void); @@ -280,11 +111,6 @@ void xbt_log_init(int *argc, char **argv) unsigned help_requested = 0; /* 1: logs; 2: categories */ int j = 1; - /* uncomment to set the LOG category to debug directly */ - // _XBT_LOGV(log).threshold = xbt_log_priority_debug; - - xbt_log_connect_categories(); - /* Set logs and init log submodule */ for (int i = 1; i < *argc; i++) { if (!strncmp(argv[i], "--log=", strlen("--log="))) { @@ -341,7 +167,7 @@ void xbt_log_postexit(void) log_cat_exit(&_XBT_LOGV(XBT_LOG_ROOT_CAT)); } - /* Size of the static string in which we build the log string */ +/* Size of the static string in which we build the log string */ #define XBT_LOG_STATIC_BUFFER_SIZE 2048 /* Minimum size of the dynamic string in which we build the log string (should be greater than XBT_LOG_STATIC_BUFFER_SIZE) */ @@ -363,18 +189,16 @@ void _xbt_log_event_log(xbt_log_event_t ev, const char *fmt, ...) /* First, try with a static buffer */ int done = 0; - if (XBT_LOG_STATIC_BUFFER_SIZE) { - char buff[XBT_LOG_STATIC_BUFFER_SIZE]; - ev->buffer = buff; - ev->buffer_size = sizeof buff; - va_start(ev->ap, fmt); - done = cat->layout->do_layout(cat->layout, ev, fmt); - va_end(ev->ap); - if (done) - appender->do_append(appender, buff); - } + char buff[XBT_LOG_STATIC_BUFFER_SIZE]; + ev->buffer = buff; + ev->buffer_size = sizeof buff; + va_start(ev->ap, fmt); + done = cat->layout->do_layout(cat->layout, ev, fmt); + va_end(ev->ap); + if (done) { + appender->do_append(appender, buff); + } else { - if (!done) { /* The static buffer was too small, use a dynamically expanded one */ ev->buffer_size = XBT_LOG_DYNAMIC_BUFFER_SIZE; ev->buffer = xbt_malloc(ev->buffer_size); @@ -398,23 +222,26 @@ void _xbt_log_event_log(xbt_log_event_t ev, const char *fmt, ...) } } -#undef XBT_LOG_DYNAMIC_BUFFER_SIZE -#undef XBT_LOG_STATIC_BUFFER_SIZE - /* NOTE: * * The standard logging macros use _XBT_LOG_ISENABLED, which calls _xbt_log_cat_init(). Thus, if we want to avoid an * infinite recursion, we can not use the standard logging macros in _xbt_log_cat_init(), and in all functions called * from it. * - * To circumvent the problem, we define the macro_xbt_log_init() as (0) for the length of the affected functions, and - * we do not forget to undefine it at the end! + * To circumvent the problem, we define the macro DISABLE_XBT_LOG_CAT_INIT() to hide the real _xbt_log_cat_init(). The + * macro has to be called at the beginning of the affected functions. */ +static int fake_xbt_log_cat_init(xbt_log_category_t XBT_ATTRIB_UNUSED category, + e_xbt_log_priority_t XBT_ATTRIB_UNUSED priority) +{ + 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; static void _xbt_log_cat_apply_set(xbt_log_category_t category, xbt_log_setting_t setting) { -#define _xbt_log_cat_init(a, b) (0) - + DISABLE_XBT_LOG_CAT_INIT(); if (setting->thresh != xbt_log_priority_uninitialized) { xbt_log_threshold_set(category, setting->thresh); @@ -441,7 +268,6 @@ static void _xbt_log_cat_apply_set(xbt_log_category_t category, xbt_log_setting_ category->additivity = 0; XBT_DEBUG("Set %p as appender of category '%s'", setting->appender, category->name); } -#undef _xbt_log_cat_init } /* @@ -450,8 +276,7 @@ static void _xbt_log_cat_apply_set(xbt_log_category_t category, xbt_log_setting_ */ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority) { -#define _xbt_log_cat_init(a, b) (0) - + DISABLE_XBT_LOG_CAT_INIT(); if (log_cat_init_mutex != NULL) xbt_os_mutex_acquire(log_cat_init_mutex); @@ -529,8 +354,6 @@ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority if (log_cat_init_mutex != NULL) xbt_os_mutex_release(log_cat_init_mutex); return priority >= category->threshold; - -#undef _xbt_log_cat_init } void xbt_log_parent_set(xbt_log_category_t cat, xbt_log_category_t parent) @@ -789,7 +612,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) { -#define _xbt_log_cat_init(a, b) (0) + DISABLE_XBT_LOG_CAT_INIT(); if (!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(NULL)); @@ -802,7 +625,6 @@ void xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay) } cat->layout = lay; xbt_log_additivity_set(cat, 0); -#undef _xbt_log_cat_init } void xbt_log_additivity_set(xbt_log_category_t cat, int additivity) @@ -847,7 +669,7 @@ static void xbt_log_help(void) "in 'l'etter)\n" " -> %%L: line number where the log event was raised (LOG4J compatible)\n" " -> %%M: function name (LOG4J compatible -- called method name here of course).\n" - " Defined only when using gcc because there is no __FUNCTION__ elsewhere.\n" + " Defined only when using gcc because there is no __func__ elsewhere.\n" "\n" " -> %%b: full backtrace (Called %%throwable in LOG4J). Defined only under windows or when using the " "GNU libc because\n"