X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a001b13d7aa269a90f035f58c71778c6812b07f6..eaaf15df4b2bd557800632665a9dee66378c192a:/src/xbt/log.c diff --git a/src/xbt/log.c b/src/xbt/log.c index 04772a3afa..3073e99ab0 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 @@ -92,182 +92,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 +104,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 +160,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 +182,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 +215,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 +261,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 +269,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 +347,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 +605,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 +618,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)