/* log - a generic logging facility in the spirit of log4j */
-/* Copyright (c) 2004-2015. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2004-2015. 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. */
/** \defgroup XBT_log_cats Existing log categories
* \ingroup XBT_log
- * \brief (automatically extracted)
+ * \brief (automatically extracted)
*
* This is the list of all existing log categories in SimGrid.
* This list is automatically extracted from the source code by the tools/doxygen/xbt_log_extract_hierarchy.pl utility.
*
- * You can thus be certain that it is uptodate, but it may somehow lack a final manual touch.
- * Anyway, nothing's perfect ;)
+ * It should thus contain every categories that are defined in the SimGrid library.
+ * If you want to see the one defined in your code in addition, provide `--help-logs` on the command line of your simulator.
*/
/* XBT_LOG_MAYDAY: define this to replace the logging facilities with basic
- printf function. Useful to debug the logging facilities themselves */
-#undef XBT_LOG_MAYDAY
+ printf function. Useful to debug the logging facilities themselves, or to not make source analysis tools mad */
//#define XBT_LOG_MAYDAY
-#ifndef _XBT_LOG_H_
-#define _XBT_LOG_H_
+#ifndef XBT_LOG_H
+#define XBT_LOG_H
#include "xbt/misc.h"
#include <stdarg.h>
* \param desc string describing the purpose of this category
* \hideinitializer
*
- * Defines a new subcategory of the parent.
+ * Defines a new subcategory of the parent.
*/
#define XBT_LOG_NEW_SUBCATEGORY(catName, parent, desc) \
XBT_LOG_EXTERNAL_CATEGORY(parent); \
XBT_LOG_NEW_SUBCATEGORY_helper(catName, parent, desc) \
/**
- * \ingroup XBT_log
+ * \ingroup XBT_log
* \param catName name of new category
* \param desc string describing the purpose of this category
* \hideinitializer
XBT_LOG_NEW_SUBCATEGORY_helper(catName, XBT_LOG_ROOT_CAT, desc)
/**
- * \ingroup XBT_log
+ * \ingroup XBT_log
* \param cname name of the cat
* \hideinitializer
*
#endif
/**
- * \ingroup XBT_log
+ * \ingroup XBT_log
* \param cname name of the cat
* \param desc string describing the purpose of this category
* \hideinitializer
XBT_LOG_DEFAULT_CATEGORY(cname)
/**
- * \ingroup XBT_log
+ * \ingroup XBT_log
* \param cname name of the cat
* \param parent name of the parent
* \param desc string describing the purpose of this category
XBT_LOG_DEFAULT_CATEGORY(cname)
/**
- * \ingroup XBT_log
+ * \ingroup XBT_log
* \param cname name of the cat
* \hideinitializer
*
XBT_PUBLIC(void) xbt_log_control_set(const char *cs);
/* Forward declarations */
-typedef struct xbt_log_appender_s s_xbt_log_appender_t, *xbt_log_appender_t;
-typedef struct xbt_log_layout_s s_xbt_log_layout_t, *xbt_log_layout_t;
-typedef struct xbt_log_event_s s_xbt_log_event_t, *xbt_log_event_t;
-typedef struct xbt_log_category_s s_xbt_log_category_t, *xbt_log_category_t;
+typedef struct xbt_log_appender_s s_xbt_log_appender_t;
+typedef struct xbt_log_appender_s* xbt_log_appender_t;
+typedef struct xbt_log_layout_s s_xbt_log_layout_t;
+typedef struct xbt_log_layout_s* xbt_log_layout_t;
+typedef struct xbt_log_event_s s_xbt_log_event_t;
+typedef struct xbt_log_event_s* xbt_log_event_t;
+typedef struct xbt_log_category_s s_xbt_log_category_t;
+typedef struct xbt_log_category_s* xbt_log_category_t;
/* Do NOT access any members of this structure directly. FIXME: move to private? */
XBT_PUBLIC(void) xbt_log_threshold_set(xbt_log_category_t cat, e_xbt_log_priority_t thresholdPriority);
/**
- * \ingroup XBT_log_implem
+ * \ingroup XBT_log_implem
* \param cat the category (not only its name, but the variable)
* \param app the appender
*
*/
XBT_PUBLIC(void) xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t app);
/**
- * \ingroup XBT_log_implem
+ * \ingroup XBT_log_implem
* \param cat the category (not only its name, but the variable)
* \param lay the layout
*
XBT_PUBLIC(void) xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay);
/**
- * \ingroup XBT_log_implem
+ * \ingroup XBT_log_implem
* \param cat the category (not only its name, but the variable)
* \param additivity whether logging actions must be passed to parent.
*
*/
XBT_PUBLIC(void) xbt_log_additivity_set(xbt_log_category_t cat, int additivity);
-/** @brief create a new simple layout
+/** @brief create a new simple layout
*
* This layout is not as flexible as the pattern one
*/
/* ********************************** */
/* Functions that you shouldn't call */
/* ********************************** */
+XBT_PUBLIC(void) xbt_log_init(int *argc, char **argv);
XBT_PUBLIC(void) _xbt_log_event_log(xbt_log_event_t ev, const char *fmt, ...) XBT_ATTRIB_PRINTF(2, 3);
XBT_PUBLIC(int) _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority);
/* ********************** */
/**
- * \ingroup XBT_log
+ * \ingroup XBT_log
* \param catName name of the category
* \param priority minimal priority to be enabled to return true (must be #e_xbt_log_priority_t)
* \hideinitializer
_log_ev.cat = &(category); \
_log_ev.priority = (prio); \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = _simgrid_log_category__default; \
_log_ev.priority = (prio); \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = &(_XBT_LOGV(categ)); \
_log_ev.priority = xbt_log_priority_debug; \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = &(_XBT_LOGV(categ)); \
_log_ev.priority = xbt_log_priority_verbose; \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = &(_XBT_LOGV(categ)); \
_log_ev.priority = xbt_log_priority_info; \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = &(_XBT_LOGV(categ)); \
_log_ev.priority = xbt_log_priority_warning; \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = &(_XBT_LOGV(categ)); \
_log_ev.priority = xbt_log_priority_error; \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = &(_XBT_LOGV(categ)); \
_log_ev.priority = xbt_log_priority_critical; \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = _simgrid_log_category__default; \
_log_ev.priority = xbt_log_priority_debug; \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = _simgrid_log_category__default; \
_log_ev.priority = xbt_log_priority_verbose; \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = _simgrid_log_category__default; \
_log_ev.priority = xbt_log_priority_info; \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = _simgrid_log_category__default; \
_log_ev.priority = xbt_log_priority_warning; \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = _simgrid_log_category__default; \
_log_ev.priority = xbt_log_priority_error; \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
_log_ev.cat = _simgrid_log_category__default; \
_log_ev.priority = xbt_log_priority_critical; \
_log_ev.fileName = __FILE__; \
- _log_ev.functionName = _XBT_FUNCTION; \
+ _log_ev.functionName = __func__; \
_log_ev.lineNum = __LINE__; \
_xbt_log_event_log(&_log_ev, __VA_ARGS__); \
} \
#define _XBT_IN_OUT(...) \
_XBT_IF_ONE_ARG(_XBT_IN_OUT_ARG1, _XBT_IN_OUT_ARGN, __VA_ARGS__)(__VA_ARGS__)
#define _XBT_IN_OUT_ARG1(fmt) \
- XBT_LOG(xbt_log_priority_trace, fmt, _XBT_FUNCTION)
+ XBT_LOG(xbt_log_priority_trace, fmt, __func__)
#define _XBT_IN_OUT_ARGN(fmt, ...) \
- XBT_LOG(xbt_log_priority_trace, fmt, _XBT_FUNCTION, __VA_ARGS__)
+ XBT_LOG(xbt_log_priority_trace, fmt, __func__, __VA_ARGS__)
/** @ingroup XBT_log
* @hideinitializer