/////////////////////////////////////////////////////////////////////////////
// Name: simplelog.h
// Purpose: simple logger
// Author: Cesar Mauri Loba (cesar at crea-si dot com)
// Copyright: (C) 2012-13 Cesar Mauri Loba - CREA Software Systems
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
/////////////////////////////////////////////////////////////////////////////
#ifndef SIMPLELOG_H
#define SIMPLELOG_H
#include
#include
#if defined (__cplusplus)
extern "C" {
#endif /* __cplusplus */
/**
* @def SLOG_DECLSPEC
* Some compilers use a special export keyword
*/
#ifndef SLOG_DECLSPEC
# if defined(WIN32)
# define SLOG_DECLSPEC
# else
# define SLOG_DECLSPEC
# endif
#endif
/**
* @brief SLOG priority
*/
typedef enum {
/** EMERGENCY level */
SLOG_PRIO_EMERG=0,
/** ALERT level */
SLOG_PRIO_ALERT=1,
/** CRITICAL level */
SLOG_PRIO_CRIT=2,
/** ERROR level */
SLOG_PRIO_ERR=3,
/** WARNING level */
SLOG_PRIO_WARNING=4,
/** NOTICE level */
SLOG_PRIO_NOTICE=5,
/** INFORMATION level */
SLOG_PRIO_INFO=6,
/** DEBUG level */
SLOG_PRIO_DEBUG=7
} slog_priority_t;
/**
* @brief Log callback function type
**/
typedef void (*slog_callback_t)(slog_priority_t, const char*, va_list);
/**
* @brief Get priority name
*/
SLOG_DECLSPEC const char* slog_get_priority_name (slog_priority_t prio);
/**
* @brief Set log callback
*
* If not set, slog_stream_callback is used
*
* @param c. Pointer the callback function. If NULL, all logging is supressed.
*/
void SLOG_DECLSPEC slog_set_callback (slog_callback_t c);
/**
* @brief Set log priority
*
* Default priority is SLOG_PRIO_ERR
*
* @param pio priority of the message to log.
* @see slog_priority_t
*/
void SLOG_DECLSPEC slog_set_priority (slog_priority_t prio);
/**
* @brief Get log priority
*
* @see slog_priority_t
*/
slog_priority_t SLOG_DECLSPEC slog_get_priority ();
/**
* @brief Log a message to output or file
*
* The message fmt must be used like printf().
*
* @param pio priority of the message to log.
* @param fmt message to log.
* @param ... Variables to include into the message.
*/
void SLOG_DECLSPEC slog_write (slog_priority_t prio, const char* fmt, ...)
#ifdef __GNUC__
__attribute__ ((format (printf, 2, 3))) // Compile time format check
#endif
;
/** @name log macros
*/
/*@{*/
#define SLOG_EMERG(fmt,...) slog_write(SLOG_PRIO_EMERG, fmt, ## __VA_ARGS__)
#define SLOG_ALERT(fmt,...) slog_write(SLOG_PRIO_ALERT, fmt, ## __VA_ARGS__)
#define SLOG_CRIT(fmt,...) slog_write(SLOG_PRIO_CRIT, fmt, ## __VA_ARGS__)
#define SLOG_ERR(fmt,...) slog_write(SLOG_PRIO_ERR, fmt, ## __VA_ARGS__)
#define SLOG_WARNING(fmt,...) slog_write(SLOG_PRIO_WARNING, fmt, ## __VA_ARGS__)
#define SLOG_NOTICE(fmt,...) slog_write(SLOG_PRIO_NOTICE, fmt, ## __VA_ARGS__)
#define SLOG_INFO(fmt,...) slog_write(SLOG_PRIO_INFO, fmt, ## __VA_ARGS__)
#define SLOG_DEBUG(fmt,...) slog_write(SLOG_PRIO_DEBUG, fmt, ## __VA_ARGS__)
/*@}*/
/**
* @name stream based log callback funtions
*/
/*@{*/
/**
* @brief Stream based log callback function.
*
* Send the message to a stream (stderr by default)
* The message will be logged only if (prio<= current log level)
* see slog_stream_callback function
*
* To be used as parameter for slog_set_callback and NOT to be
* called directly.
*/
void SLOG_DECLSPEC slog_stream_callback (slog_priority_t, const char*, va_list);
/**
* @brief Set the logging priority for the stream based log callback function.
*
* @param stream. If NULL defaults to stderr
*/
void SLOG_DECLSPEC slog_stream_set_stream (FILE *stream);
/*@}*/
#if defined (__cplusplus)
}
#endif /* __cplusplus */
#endif /* SIMPLELOG_H */