2009-08-24 14:43:48 -07:00
|
|
|
/* EINA - EFL data type library
|
|
|
|
* Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric Bail
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library;
|
|
|
|
* if not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef EINA_LOG_H_
|
|
|
|
#define EINA_LOG_H_
|
|
|
|
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
|
|
|
#include "eina_types.h"
|
|
|
|
|
|
|
|
#define EINA_COLOR_LIGHTRED "\033[31;1m"
|
|
|
|
#define EINA_COLOR_RED "\033[31m"
|
2009-09-11 07:22:24 -07:00
|
|
|
#define EINA_COLOR_LIGHTBLUE "\033[34;1m"
|
|
|
|
#define EINA_COLOR_BLUE "\033[34m"
|
2009-08-24 14:43:48 -07:00
|
|
|
#define EINA_COLOR_GREEN "\033[32;1m"
|
|
|
|
#define EINA_COLOR_YELLOW "\033[33;1m"
|
2009-09-02 18:31:26 -07:00
|
|
|
#define EINA_COLOR_ORANGE "\033[0;33m"
|
2009-08-24 14:43:48 -07:00
|
|
|
#define EINA_COLOR_WHITE "\033[37;1m"
|
2009-09-11 07:22:24 -07:00
|
|
|
#define EINA_COLOR_LIGHTCYAN "\033[36;1m"
|
|
|
|
#define EINA_COLOR_CYAN "\033[36m"
|
2009-08-24 14:43:48 -07:00
|
|
|
#define EINA_COLOR_RESET "\033[0m"
|
2009-09-02 17:07:25 -07:00
|
|
|
#define EINA_COLOR_HIGH "\033[1m"
|
2009-08-24 14:43:48 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @addtogroup Eina_Tools_Group Tools
|
|
|
|
*
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @defgroup Eina_Log_Group Log
|
|
|
|
*
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
|
|
|
EAPI extern int EINA_LOG_DOMAIN_GLOBAL;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @def EINA_LOG(DOM, LEVEL, fmt, ...)
|
|
|
|
* Logs a message on the specified domain, level and format.
|
2009-09-04 14:28:50 -07:00
|
|
|
*
|
|
|
|
* @note if @c EINA_LOG_LEVEL_MAXIMUM is defined, then messages larger
|
|
|
|
* than this value will be ignored regardless of current domain
|
|
|
|
* level, the eina_log_print() is not even called! Most
|
|
|
|
* compilers will just detect the two integers make the branch
|
|
|
|
* impossible and remove the branch and function call all
|
|
|
|
* together. Take this as optimization tip and possible remove
|
|
|
|
* debug messages from binaries to be deployed, saving on hot
|
|
|
|
* paths. Never define @c EINA_LOG_LEVEL_MAXIMUM on public
|
|
|
|
* header files.
|
2009-08-24 14:43:48 -07:00
|
|
|
*/
|
2009-09-04 14:28:50 -07:00
|
|
|
#ifdef EINA_LOG_LEVEL_MAXIMUM
|
|
|
|
#define EINA_LOG(DOM, LEVEL, fmt, ...) \
|
|
|
|
do { \
|
|
|
|
if (LEVEL <= EINA_LOG_LEVEL_MAXIMUM) \
|
|
|
|
eina_log_print(DOM, LEVEL, __FILE__, __FUNCTION__, __LINE__, \
|
|
|
|
fmt, ##__VA_ARGS__); \
|
|
|
|
} while (0)
|
|
|
|
#else
|
2009-08-24 14:43:48 -07:00
|
|
|
#define EINA_LOG(DOM, LEVEL, fmt, ...) \
|
|
|
|
eina_log_print(DOM, LEVEL, __FILE__, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__)
|
2009-09-04 14:28:50 -07:00
|
|
|
#endif
|
2009-08-24 14:43:48 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @def EINA_LOG_DOM_CRIT(DOM, fmt, ...)
|
|
|
|
* Logs a message with level CRITICAL on the specified domain and format.
|
|
|
|
*/
|
|
|
|
#define EINA_LOG_DOM_CRIT(DOM, fmt, ...) \
|
|
|
|
EINA_LOG(DOM, EINA_LOG_LEVEL_CRITICAL, fmt, ##__VA_ARGS__)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @def EINA_LOG_DOM_ERR(DOM, fmt, ...)
|
|
|
|
* Logs a message with level ERROR on the specified domain and format.
|
|
|
|
*/
|
|
|
|
#define EINA_LOG_DOM_ERR(DOM, fmt, ...) \
|
|
|
|
EINA_LOG(DOM, EINA_LOG_LEVEL_ERR, fmt, ##__VA_ARGS__)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @def EINA_LOG_DOM_INFO(DOM, fmt, ...)
|
|
|
|
* Logs a message with level INFO on the specified domain and format.
|
|
|
|
*/
|
|
|
|
#define EINA_LOG_DOM_INFO(DOM, fmt, ...) \
|
|
|
|
EINA_LOG(DOM, EINA_LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @def EINA_LOG_DOM_DBG(DOM, fmt, ...)
|
|
|
|
* Logs a message with level DEBUG on the specified domain and format.
|
|
|
|
*/
|
|
|
|
#define EINA_LOG_DOM_DBG(DOM, fmt, ...) \
|
|
|
|
EINA_LOG(DOM, EINA_LOG_LEVEL_DBG, fmt, ##__VA_ARGS__)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @def EINA_LOG_DOM_WARN(DOM, fmt, ...)
|
|
|
|
* Logs a message with level WARN on the specified domain and format.
|
|
|
|
*/
|
|
|
|
#define EINA_LOG_DOM_WARN(DOM, fmt, ...) \
|
|
|
|
EINA_LOG(DOM, EINA_LOG_LEVEL_WARN, fmt, ##__VA_ARGS__)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @def EINA_LOG_CRIT(fmt, ...)
|
|
|
|
* Logs a message with level CRITICAL on the global domain with the specified
|
|
|
|
* format.
|
|
|
|
*/
|
|
|
|
#define EINA_LOG_CRIT(fmt, ...) \
|
|
|
|
EINA_LOG(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL, fmt, ##__VA_ARGS__)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @def EINA_LOG_ERR(fmt, ...)
|
|
|
|
* Logs a message with level ERROR on the global domain with the specified
|
|
|
|
* format.
|
|
|
|
*/
|
|
|
|
#define EINA_LOG_ERR(fmt, ...) \
|
|
|
|
EINA_LOG(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_ERR, fmt, ##__VA_ARGS__)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @def EINA_LOG_INFO(fmt, ...)
|
|
|
|
* Logs a message with level INFO on the global domain with the specified
|
|
|
|
* format.
|
|
|
|
*/
|
|
|
|
#define EINA_LOG_INFO(fmt, ...) \
|
|
|
|
EINA_LOG(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @def EINA_LOG_WARN(fmt, ...)
|
|
|
|
* Logs a message with level WARN on the global domain with the specified
|
|
|
|
* format.
|
|
|
|
*/
|
|
|
|
#define EINA_LOG_WARN(fmt, ...) \
|
|
|
|
EINA_LOG(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_WARN, fmt, ##__VA_ARGS__)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @def EINA_LOG_DBG(fmt, ...)
|
|
|
|
* Logs a message with level DEBUG on the global domain with the specified
|
|
|
|
* format.
|
|
|
|
*/
|
|
|
|
#define EINA_LOG_DBG(fmt, ...) \
|
|
|
|
EINA_LOG(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_DBG, fmt, ##__VA_ARGS__)
|
|
|
|
|
2009-12-27 00:45:30 -08:00
|
|
|
/**
|
|
|
|
* @typedef Eina_Log_Domain
|
|
|
|
* The domain used for logging.
|
|
|
|
*/
|
2009-08-24 14:43:48 -07:00
|
|
|
typedef struct _Eina_Log_Domain Eina_Log_Domain;
|
|
|
|
|
2009-12-27 00:45:30 -08:00
|
|
|
/**
|
|
|
|
* @struct _Eina_Log_Domain
|
|
|
|
* The domain used for logging.
|
|
|
|
*/
|
2009-08-24 14:43:48 -07:00
|
|
|
struct _Eina_Log_Domain
|
|
|
|
{
|
2009-12-27 00:45:30 -08:00
|
|
|
int level; /**< Max level to log */
|
2009-08-24 14:43:48 -07:00
|
|
|
const char *domain_str; /**< Formatted string with color to print */
|
|
|
|
const char *name; /**< Domain name */
|
|
|
|
|
|
|
|
/* Private */
|
2009-12-27 00:45:30 -08:00
|
|
|
Eina_Bool deleted:1; /**< Flags deletion of domain, a free slot */
|
2009-08-24 14:43:48 -07:00
|
|
|
};
|
|
|
|
|
2009-09-06 15:21:56 -07:00
|
|
|
EAPI void eina_log_threads_enable(void);
|
2009-08-24 14:43:48 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @enum _Eina_Log_Level
|
|
|
|
* List of available logging levels.
|
|
|
|
*/
|
|
|
|
typedef enum _Eina_Log_Level
|
|
|
|
{
|
|
|
|
EINA_LOG_LEVEL_CRITICAL, /**< Critical log level */
|
|
|
|
EINA_LOG_LEVEL_ERR, /**< Error log level */
|
|
|
|
EINA_LOG_LEVEL_WARN, /**< Warning log level */
|
|
|
|
EINA_LOG_LEVEL_INFO, /**< Information log level */
|
|
|
|
EINA_LOG_LEVEL_DBG, /**< Debug log level */
|
|
|
|
EINA_LOG_LEVELS, /**< Count of default log levels */
|
2009-08-27 14:32:42 -07:00
|
|
|
EINA_LOG_LEVEL_UNKNOWN = (-2147483647-1) /**< Unknown level */
|
2009-08-24 14:43:48 -07:00
|
|
|
} Eina_Log_Level;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @typedef Eina_Log_Print_Cb
|
|
|
|
* Type for print callbacks.
|
|
|
|
*/
|
|
|
|
typedef void (*Eina_Log_Print_Cb)(const Eina_Log_Domain *d, Eina_Log_Level level,
|
|
|
|
const char *file, const char *fnc, int line,
|
|
|
|
const char *fmt, void *data, va_list args);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Customization
|
|
|
|
*/
|
2010-02-08 16:52:00 -08:00
|
|
|
EAPI void eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data) EINA_ARG_NONNULL(1);
|
|
|
|
|
|
|
|
EAPI void eina_log_level_set(int level);
|
|
|
|
EAPI int eina_log_level_get(void) EINA_WARN_UNUSED_RESULT;
|
|
|
|
|
|
|
|
EAPI Eina_Bool eina_log_main_thread_check(void) EINA_CONST EINA_WARN_UNUSED_RESULT;
|
|
|
|
|
|
|
|
EAPI void eina_log_color_disable_set(Eina_Bool disabled);
|
|
|
|
EAPI Eina_Bool eina_log_color_disable_get(void) EINA_WARN_UNUSED_RESULT;
|
|
|
|
EAPI void eina_log_file_disable_set(Eina_Bool disabled);
|
|
|
|
EAPI Eina_Bool eina_log_file_disable_get(void) EINA_WARN_UNUSED_RESULT;
|
|
|
|
EAPI void eina_log_function_disable_set(Eina_Bool disabled);
|
|
|
|
EAPI Eina_Bool eina_log_function_disable_get(void) EINA_WARN_UNUSED_RESULT;
|
|
|
|
EAPI void eina_log_abort_on_critical_set(Eina_Bool abort_on_critical);
|
|
|
|
EAPI Eina_Bool eina_log_abort_on_critical_get(void) EINA_WARN_UNUSED_RESULT;
|
|
|
|
EAPI void eina_log_abort_on_critical_level_set(int critical_level);
|
|
|
|
EAPI int eina_log_abort_on_critical_level_get(void) EINA_WARN_UNUSED_RESULT;
|
|
|
|
|
|
|
|
EAPI void eina_log_domain_level_set(const char *domain_name, int level) EINA_ARG_NONNULL(1);
|
|
|
|
EAPI int eina_log_domain_level_get(const char *domain_name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
|
|
|
|
EAPI int eina_log_domain_registered_level_get(int domain) EINA_WARN_UNUSED_RESULT;
|
|
|
|
|
2009-08-24 14:43:48 -07:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Logging domains
|
|
|
|
*/
|
|
|
|
EAPI int eina_log_domain_register(const char *name, const char *color) EINA_ARG_NONNULL(1);
|
|
|
|
EAPI void eina_log_domain_unregister(int domain);
|
|
|
|
|
2009-09-03 17:57:09 -07:00
|
|
|
/*
|
|
|
|
* Logging functions.
|
|
|
|
*/
|
2009-09-04 14:55:03 -07:00
|
|
|
EAPI void eina_log_print(int domain, Eina_Log_Level level, const char *file, const char *function, int line, const char *fmt, ...) EINA_ARG_NONNULL(3, 4, 6) EINA_PRINTF(6, 7) EINA_NOINSTRUMENT;
|
|
|
|
EAPI void eina_log_vprint(int domain, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, va_list args) EINA_ARG_NONNULL(3, 4, 6) EINA_NOINSTRUMENT;
|
2009-09-03 17:57:09 -07:00
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Logging methods (change how logging is done).
|
|
|
|
*/
|
2009-08-24 14:43:48 -07:00
|
|
|
EAPI void eina_log_print_cb_stdout(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args);
|
2009-09-02 16:28:00 -07:00
|
|
|
EAPI void eina_log_print_cb_stderr(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args);
|
2009-08-24 14:43:48 -07:00
|
|
|
EAPI void eina_log_print_cb_file(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @}
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @}
|
|
|
|
*/
|
|
|
|
|
|
|
|
#endif /* EINA_LOG_H_ */
|