X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcfg%2Flog.h;h=84d5cc637f195da4bb9781c58545d1da17e67d5e;hb=0eeba5822b3ff0e76ae0fd0272536d371d272d7d;hp=b3fa27f98b446a07970841f513cd3656b1e397d8;hpb=fc1c829d69a2731429d3b884294f918019d8fb95;p=bertos.git diff --git a/bertos/cfg/log.h b/bertos/cfg/log.h index b3fa27f9..84d5cc63 100644 --- a/bertos/cfg/log.h +++ b/bertos/cfg/log.h @@ -27,67 +27,65 @@ * the GNU General Public License. * * Copyright 2008 Develer S.r.l. (http://www.develer.com/) - * All Rights Reserved. + * * --> * * \brief Logging system module. * - * This module implement a simple interface to use the multi level - * logging system. + * This module implement a simple interface to use the multi level logging system. * The log message have the priority order, like this: * - * - error message (most hight) - * - warning message - * - info message (most low) + * - error message (highest) + * - warning message + * - info message (lowest) * * With this priority system we can log only the message that have egual or major - * priority than log level that you has been configurate. Further you can have a - * differ log level for each module that you want. To do this you just need to + * priority than log level that you has been configurate. Further you can have a + * differ log level for each module that you want. To do this you just need to * define LOG_LEVEL in cfg of select module. * When you set a log level, the system logs only the message that have priority * egual or major that you have define, but the other logs function are not include * at compile time, so all used logs function are linked, but the other no. * - * To use logging system you should include this module in your drive and use + * To use logging system you should include this module in your drive and use * a LOG_ERROR, LOG_WARNING and LOG_INFO macros to set the level log of the message. * Then you should define a LOG_LEVEL and LOG_VERBOSE costant in your - * cfg/cfg_.h using the follow police: - * + * \c cfg/cfg_\.h using the follow policy: + * + * - in your file \c cfg/cfg_\.h, you define the logging + * level and verbosity mode for your specific module: + * * \code + * /// Module logging level. + * #define _LOG_LEVEL LOG_LVL_INFO * - * /** - * * Logging level definition. - * * - * * Use 0 to log only the error messages - * * Use 1 to log the error and warning messages - * * Use 2 to log all messages - * * - * #define _LOG_LEVEL 2 - * - * /** - * * Set logging verbosity. - * * - * * If verbose is zero print short log messages. - * * - * #define _LOG_VERBOSE 1 - * - * // Define logging setting (for cfg/log.h module). - * #define LOG_LEVEL _LOG_LEVEL - * #define LOG_VERBOSE _LOG_VERBOSE + * /// Module logging format. + * #define _LOG_FORMAT LOG_FMT_VERBOSE + * \endcode + * + * - then, in the module that you use a logging macros you should define + * a LOG_LEVEL and LOG_FORMAT using the previous value that you have define + * in cfg_.h header. After this you should include the cfg/log.h + * module: * + * \code + * // Define log settings for cfg/log.h. + * #define LOG_LEVEL _LOG_LEVEL + * #define LOG_FORMAT _LOG_FORMAT + * #include * \endcode * * if you include a log.h module without define the LOG_LEVEL and LOG_VERBOSE * macros, the module use the default setting (see below). * * WARNING: when use the log.h module, and you want to set a your log level - * make sure to include this module after a cfg_.h, because the - * LOG_LEVEL and LOG_VERBOSE macros must be define before to include log module, + * make sure to include this module after a \c cfg_.h, because the + * LOG_LEVEL and LOG_VERBOSE macros must be defined before to include log module, * otherwise the log module use a default settings. * * \version $Id$ - * * \author Daniele Basile + * */ #ifndef CFG_LOG_H @@ -95,46 +93,69 @@ #include -// Use a default setting if nobody have define a log level + +// Use a default setting if nobody defined a log level #ifndef LOG_LEVEL -#define LOG_LEVEL DBG_LOG_ERROR +#define LOG_LEVEL LOG_LVL_ERR #endif -// Use a default setting if nobody have define a log verbosity -#ifndef LOG_VERBOSE -#define LOG_VERBOSE DBG_LOG_SILENT +// Use a default setting if nobody defined a log format +#ifndef LOG_FORMAT +#define LOG_FORMAT LOG_FMT_TERSE #endif /** - * Error log message. - * Use this macro to print error messages. This log level have hight priority, - * that means the error messages are always printed, if debug is enable. - */ -#define LOG_ERROR(str,...) DBG_ERROR(LOG_LEVEL, LOG_VERBOSE, str, ## __VA_ARGS__) - -/** - * Log message level select. + * \name Logging level definition + * * When you choose a log level messages you choose * also which print function are linked. * If you choose a low level of log you link all log function (error, warning and info), * but if choose a hight level you link only that have the priority egual or hight. - * The priority level go from error (most hight) to info (most low) (see cfg/debug.h + * The priority level go from error (most hight) to info (most low) (see cfg/debug.h * for more detail). + * \{ + */ +#define LOG_LVL_NONE 0 +#define LOG_LVL_ERR 1 +#define LOG_LVL_WARN 2 +#define LOG_LVL_INFO 3 +/* \} */ + +/** + * \name Logging format * + * There are two logging format: terse and verbose. The latter prepends + * function names and line number information to each log entry. + * \{ */ -#if (LOG_LEVEL <= DBG_LOG_INFO) - #define LOG_WARNING(str,...) DBG_WARNING(LOG_LEVEL, LOG_VERBOSE, str, ## __VA_ARGS__) - #define LOG_INFO(str,...) DBG_INFO(LOG_LEVEL, LOG_VERBOSE, str, ## __VA_ARGS__) +#define LOG_FMT_VERBOSE 1 +#define LOG_FMT_TERSE 0 +/* \} */ -#elif (LOG_LEVEL <= DBG_LOG_WARNING) - #define LOG_WARNING(str,...) DBG_WARNING(LOG_LEVEL, LOG_VERBOSE, str, ## __VA_ARGS__) - #define LOG_INFO(str,...) /* Nothing */ +#if LOG_FORMAT == LOG_FMT_VERBOSE + #define LOG_PRINT(str_level, str,...) kprintf("%s():%d:%s: " str, __func__, __LINE__, str_level, ## __VA_ARGS__) +#elif LOG_FORMAT == LOG_FMT_TERSE + #define LOG_PRINT(str_level, str,...) kprintf("%s: " str, str_level, ## __VA_ARGS__) +#else + #error No LOG_FORMAT defined +#endif -#else /* LOG_LEVEL <= DBG_LOG_ERROR */ - #define LOG_WARNING(str,...) /* Nothing */ - #define LOG_INFO(str,...) /* Nothing */ +#if LOG_LEVEL >= LOG_LVL_ERR + #define LOG_ERR(str,...) LOG_PRINT("ERR", str, ## __VA_ARGS__) +#else + #define LOG_ERR(str,...) /* Nothing */ +#endif +#if LOG_LEVEL >= LOG_LVL_WARN + #define LOG_WARN(str,...) LOG_PRINT("WARN", str, ## __VA_ARGS__) +#else + #define LOG_WARN(str,...) /* Nothing */ #endif -#endif /* CFG_LOG_H */ +#if LOG_LEVEL >= LOG_LVL_INFO + #define LOG_INFO(str,...) LOG_PRINT("INFO", str, ## __VA_ARGS__) +#else + #define LOG_INFO(str,...) /* Nothing */ +#endif +#endif /* CFG_LOG_H */