X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/89116b1610923aaa6ee2a8bc7bc2dfe85b697886..cd69f8c66886ae218c6a9b38125b27fe157e6bb2:/src/xbt/log.c diff --git a/src/xbt/log.c b/src/xbt/log.c index 245f17697a..3b59e3c4d6 100644 --- a/src/xbt/log.c +++ b/src/xbt/log.c @@ -1,12 +1,11 @@ /* log - a generic logging facility in the spirit of log4j */ -/* Copyright (c) 2004-2011. The SimGrid Team. +/* Copyright (c) 2004-2014. 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. */ - #include #include #include /* snprintf */ @@ -24,7 +23,6 @@ #include "xbt/dynar.h" #include "xbt/xbt_os_thread.h" -XBT_PUBLIC_DATA(int) (*xbt_pid) (); 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_rmutex_t log_cat_init_mutex = NULL; @@ -100,7 +98,7 @@ controlled by the priority concept (which should maybe be renamed to severity). Empirically, the user can specify that he wants to see every debugging message -of GRAS while only being interested into the messages at level "error" or +of MSG while only being interested into the messages at level "error" or higher about the XBT internals. \subsection log_app 1.3 Message appenders @@ -187,7 +185,7 @@ format. This is usually a good idea. Here is an example of the most basic type of macro. This is a logging request with priority warning. -XBT_CLOG(MyCat, gras_log_priority_warning, "Values are: %d and '%s'", 5, +XBT_CLOG(MyCat, xbt_log_priority_warning, "Values are: %d and '%s'", 5, "oops"); A logging request is said to be enabled if its priority is higher than or @@ -256,7 +254,7 @@ XBT_LOG_NEW_CATEGORY(VSS); XBT_LOG_NEW_DEFAULT_SUBCATEGORY(SA, VSS); int main() { - / * Now set the parent's priority. (the string would typcially be a runtime option) * / + / * Now set the parent's priority. (the string would typically be a runtime option) * / xbt_log_control_set("SA.thresh:3"); / * This request is enabled, because WARNING >= INFO. * / @@ -274,9 +272,6 @@ int main() { } \endverbatim -Another example can be found in the relevant part of the GRAS tutorial: -\ref GRAS_tut_tour_logs. - \section log_user 3. User interface \section log_use_conf 3.1 Configuration @@ -284,19 +279,36 @@ Another example can be found in the relevant part of the GRAS tutorial: Although rarely done, it is possible to configure the logs during program initialization by invoking the xbt_log_control_set() method manually. A more conventional way is to use the --log command line -argument. xbt_init() (called by MSG_init(), gras_init() and friends) +argument. xbt_init() (called by MSG_init() and friends) checks and deals properly with such arguments. \subsection log_use_conf_thres 3.1.1 Threshold configuration The most common setting is to control which logging event will get displayed by setting a threshold to each category through the -thres keyword. +threshold keyword. -For example, \verbatim --log=root.thres:debug\endverbatim will make +For example, \verbatim --log=root.threshold:debug\endverbatim will make SimGrid extremely verbose while \verbatim --log=root.thres:critical\endverbatim should shut it almost -completely off. The full list of recognized thresholds is the following: +completely off. + +Note that the threshold keyword can be abbreviated here. For example, +all the following notations have the same result. +\verbatim +--log=root.threshold:debug +--log=root.threshol:debug +--log=root.thresho:debug +--log=root.thresh:debug +--log=root.thres:debug +--log=root.thre:debug +--log=root.thr:debug +--log=root.th:debug +--log=root.t:debug +--log=root.:debug <--- That's obviously really ugly, but it actually works. +\endverbatim + +The full list of recognized thresholds is the following: - trace: enter and return of some functions - debug: crufty output @@ -338,7 +350,7 @@ Here are the existing format directives: - %%p: Priority name (LOG4J compatible) - %%h: Hostname (SimGrid extension) - - %%P: Process name (SimGrid extension) + - %%P: Process name (SimGrid extension -- note that with SMPI this is the integer value of the process rank) - %%t: Thread "name" (LOG4J compatible -- actually the address of the thread in memory) - %%i: Process PID (SimGrid extension -- this is a 'i' as in 'i'dea) @@ -408,6 +420,16 @@ The following example resets the additivity of the xbt category to true (which i option and specify the max file size. This would be a nice default for non-kernel applications. - Careful, category names are global variables. + - When writing a log format, you often want to use spaces. If you don't + protect these spaces, they are used as configuration elements separators. + For example, if you want to remove the date from the logs, you want to pass the following + argument on the command line. The outer quotes are here to protect the string from the shell + interpretation while the inner ones are there to prevent simgrid from splitting the string + in several log parameters (that would be invalid). + \verbatim --log="'root.fmt:%l: [%p/%c]: %m%n'"\endverbatim + Another option is to use the SimGrid-specific format directive \%e for + spaces, like in the following. + \verbatim --log="root.fmt:%l:%e[%p/%c]:%e%m%n"\endverbatim \section log_internals 4. Internal considerations @@ -425,10 +447,10 @@ requires an a single comparison of a static variable to a constant. There is also compile time constant, \ref XBT_LOG_STATIC_THRESHOLD, which causes all logging requests with a lower priority to be optimized to 0 cost -by the compiler. By setting it to gras_log_priority_infinite, all logging +by the compiler. By setting it to xbt_log_priority_infinite, all logging requests are statically disabled at compile time and cost nothing. Released executables might be compiled with (note that it will prevent users to debug their problems) -\verbatim-DXBT_LOG_STATIC_THRESHOLD=gras_log_priority_infinite\endverbatim +\verbatim-DXBT_LOG_STATIC_THRESHOLD=xbt_log_priority_infinite\endverbatim Compiling with the \verbatim-DNLOG\endverbatim option disables all logging requests at compilation time while the \verbatim-DNDEBUG\endverbatim disables @@ -529,32 +551,10 @@ 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() */ - /* amok */ - XBT_LOG_CONNECT(amok); - XBT_LOG_CONNECT(amok_bw); - XBT_LOG_CONNECT(amok_bw_sat); - XBT_LOG_CONNECT(amok_pm); - - /* gras */ - XBT_LOG_CONNECT(gras); - XBT_LOG_CONNECT(gras_modules); - XBT_LOG_CONNECT(gras_msg); - XBT_LOG_CONNECT(gras_msg_read); - XBT_LOG_CONNECT(gras_msg_rpc); - XBT_LOG_CONNECT(gras_timer); - XBT_LOG_CONNECT(gras_trp); - XBT_LOG_CONNECT(gras_trp_file); - XBT_LOG_CONNECT(gras_virtu); - XBT_LOG_CONNECT(gras_virtu_emul); - XBT_LOG_CONNECT(gras_virtu_process); - /* xbt */ XBT_LOG_CONNECT(xbt); XBT_LOG_CONNECT(graphxml_parse); XBT_LOG_CONNECT(log); -#if HAVE_MMAP - XBT_LOG_CONNECT(mm_diff); -#endif XBT_LOG_CONNECT(module); XBT_LOG_CONNECT(peer); XBT_LOG_CONNECT(replay); @@ -566,36 +566,23 @@ static void xbt_log_connect_categories(void) #ifdef XBT_USE_DEPRECATED XBT_LOG_CONNECT(xbt_dict_multi); #endif - XBT_LOG_CONNECT(xbt_ddt); - XBT_LOG_CONNECT(xbt_ddt_cbps); - XBT_LOG_CONNECT(xbt_ddt_convert); - XBT_LOG_CONNECT(xbt_ddt_create); - XBT_LOG_CONNECT(xbt_ddt_exchange); - XBT_LOG_CONNECT(xbt_ddt_parse); - XBT_LOG_CONNECT(xbt_ddt_lexer); XBT_LOG_CONNECT(xbt_dyn); XBT_LOG_CONNECT(xbt_ex); XBT_LOG_CONNECT(xbt_fifo); XBT_LOG_CONNECT(xbt_graph); + XBT_LOG_CONNECT(xbt_heap); XBT_LOG_CONNECT(xbt_lib); XBT_LOG_CONNECT(xbt_mallocator); XBT_LOG_CONNECT(xbt_matrix); XBT_LOG_CONNECT(xbt_parmap); - XBT_LOG_CONNECT(xbt_parmap_unit); XBT_LOG_CONNECT(xbt_queue); XBT_LOG_CONNECT(xbt_set); XBT_LOG_CONNECT(xbt_sync); XBT_LOG_CONNECT(xbt_sync_os); - XBT_LOG_CONNECT(xbt_trp); - XBT_LOG_CONNECT(xbt_trp_meas); - XBT_LOG_CONNECT(xbt_trp_tcp); #ifdef simgrid_EXPORTS /* The following categories are only defined in libsimgrid */ - /* gras (sg) */ - XBT_LOG_CONNECT(gras_trp_sg); - /* bindings */ #ifdef HAVE_LUA XBT_LOG_CONNECT(bindings); @@ -612,9 +599,22 @@ static void xbt_log_connect_categories(void) /* instr */ #ifdef HAVE_TRACING 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_msg_vm); + XBT_LOG_CONNECT(instr_paje_containers); + XBT_LOG_CONNECT(instr_paje_header); XBT_LOG_CONNECT(instr_paje_trace); - XBT_LOG_CONNECT(instr_smpi); + 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_sd); XBT_LOG_CONNECT(instr_surf); + XBT_LOG_CONNECT(instr_trace); + XBT_LOG_CONNECT(instr_TI_trace); #endif /* jedule */ @@ -628,12 +628,20 @@ static void xbt_log_connect_categories(void) #ifdef HAVE_MC XBT_LOG_CONNECT(mc); XBT_LOG_CONNECT(mc_checkpoint); - XBT_LOG_CONNECT(mc_dpor); + XBT_LOG_CONNECT(mc_comm_determinism); + XBT_LOG_CONNECT(mc_compare); + XBT_LOG_CONNECT(mc_diff); + XBT_LOG_CONNECT(mc_dwarf); XBT_LOG_CONNECT(mc_global); + XBT_LOG_CONNECT(mc_hash); + XBT_LOG_CONNECT(mc_ignore); XBT_LOG_CONNECT(mc_liveness); XBT_LOG_CONNECT(mc_memory); XBT_LOG_CONNECT(mc_memory_map); + XBT_LOG_CONNECT(mc_page_snapshot); XBT_LOG_CONNECT(mc_request); + XBT_LOG_CONNECT(mc_safety); + XBT_LOG_CONNECT(mc_visited); #endif /* msg */ @@ -644,6 +652,7 @@ static void xbt_log_connect_categories(void) 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); @@ -669,16 +678,20 @@ static void xbt_log_connect_categories(void) XBT_LOG_CONNECT(simix_process); XBT_LOG_CONNECT(simix_smurf); XBT_LOG_CONNECT(simix_synchro); + XBT_LOG_CONNECT(simix_vm); /* smpi */ /* SMPI categories are connected in smpi_global.c */ /* surf */ XBT_LOG_CONNECT(surf); + XBT_LOG_CONNECT(platf_generator); XBT_LOG_CONNECT(random); 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_kernel); XBT_LOG_CONNECT(surf_lagrange); XBT_LOG_CONNECT(surf_lagrange_dichotomy); @@ -686,22 +699,29 @@ static void xbt_log_connect_categories(void) XBT_LOG_CONNECT(surf_network); #ifdef HAVE_GTNETS XBT_LOG_CONNECT(surf_network_gtnets); + XBT_LOG_CONNECT(surf_network_gtnets_interface); + XBT_LOG_CONNECT(surf_network_gtnets_simulator); + XBT_LOG_CONNECT(surf_network_gtnets_topology); #endif #ifdef HAVE_NS3 XBT_LOG_CONNECT(surf_network_ns3); + XBT_LOG_CONNECT(interface_ns3); + XBT_LOG_CONNECT(simulator_ns3); #endif XBT_LOG_CONNECT(surf_parse); 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_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_rulebased); XBT_LOG_CONNECT(surf_route_vivaldi); XBT_LOG_CONNECT(surf_storage); XBT_LOG_CONNECT(surf_trace); + XBT_LOG_CONNECT(surf_vm_workstation); XBT_LOG_CONNECT(surf_workstation); #endif /* simgrid_EXPORTS */ @@ -1055,7 +1075,7 @@ void xbt_log_threshold_set(xbt_log_category_t cat, 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 = xbt_new(s_xbt_log_setting_t, 1); const char *name, *dot, *eq; @@ -1077,10 +1097,10 @@ static xbt_log_setting_t _xbt_log_parse_setting(const char *control_string) eq = control_string; control_string += strcspn(control_string, " "); - xbt_assert(*dot == '.' && (*eq == '=' || *eq == ':'), - "Invalid control string '%s'", control_string); + if(*dot != '.' && (*eq == '=' || *eq == ':')) + xbt_die ("Invalid control string '%s'", orig_control_string); - if (!strncmp(dot + 1, "thresh", (size_t) (eq - dot - 1))) { + if (!strncmp(dot + 1, "threshold", (size_t) (eq - dot - 1))) { int i; char *neweq = xbt_strdup(eq + 1); char *p = neweq - 1; @@ -1098,7 +1118,12 @@ static xbt_log_setting_t _xbt_log_parse_setting(const char *control_string) break; } } - if (i < xbt_log_priority_infinite) { + + if(ithresh = (e_xbt_log_priority_t) i; } else { THROWF(arg_error, 0, @@ -1360,8 +1385,8 @@ static void xbt_log_help_categories_rec(xbt_log_category_t category, this_prefix = bprintf("%s \\_ ", prefix); child_prefix = bprintf("%s | ", prefix); } else { - this_prefix = bprintf("%s", prefix); - child_prefix = bprintf("%s", prefix); + this_prefix = xbt_strdup(prefix); + child_prefix = xbt_strdup(prefix); } dynar = xbt_dynar_new(sizeof(xbt_log_category_t), NULL);