liblog/include/log.h

212 lines
8.4 KiB
C

/*----------------------------------------------------------------------------*/
/* log.h */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* This file is part of LibLog. */
/* */
/* LibLog 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 3 of the License, or */
/* (at your option) any later version. */
/* */
/* LibLog 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 LibLog. If not, see */
/* <https://www.gnu.org/licenses/>. */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* Includes */
/*----------------------------------------------------------------------------*/
#ifndef _LIBLOG_H_
#define _LIBLOG_H_
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stdbool.h>
#include <errno.h>
#include <time.h>
#include <sys/time.h>
/*----------------------------------------------------------------------------*/
/* Pre definitions */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* Definitions */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* LGD_API definition */
/*----------------------------------------------------------------------------*/
# ifdef _LIBLOG_C_
# define LGD_API
# else
# define LGD_API extern
# endif
/*----------------------------------------------------------------------------*/
/* Status definition */
/*----------------------------------------------------------------------------*/
typedef short LGT_Status;
#define LGS_OK ( LGT_Status) 0
#define LGS_KO ( LGT_Status) 1
#define LGD_LOG_TYPE_NB 5
typedef short LGT_Log_Type_Id;
#define LGD_LOG_TYPE_ID_UNKNOWN ( LGT_Log_Type_Id) 0
#define LGD_LOG_TYPE_ID_TRACE ( LGT_Log_Type_Id) 1
#define LGD_LOG_TYPE_ID_INFO ( LGT_Log_Type_Id) 2
#define LGD_LOG_TYPE_ID_WARNING ( LGT_Log_Type_Id) 3
#define LGD_LOG_TYPE_ID_ERROR ( LGT_Log_Type_Id) 4
typedef char *LGT_Log_Type_Name;
#define LGD_LOG_TYPE_NAME_UNKNOWN ( LGT_Log_Type_Name) "???"
#define LGD_LOG_TYPE_NAME_TRACE ( LGT_Log_Type_Name) "TRA"
#define LGD_LOG_TYPE_NAME_INFO ( LGT_Log_Type_Name) "INF"
#define LGD_LOG_TYPE_NAME_WARNING ( LGT_Log_Type_Name) "WRN"
#define LGD_LOG_TYPE_NAME_ERROR ( LGT_Log_Type_Name) "ERR"
typedef short LGT_Log_Level;
#define LGD_LOG_LEVEL_UNKNOWN ( LGT_Log_Level) 0
#define LGD_LOG_LEVEL_DEFAULT ( LGT_Log_Level) 1
#ifdef _LOG_TRACE
#define LG_LOG_TRACE( Level, Fmt, ...) LG_Log( LGD_LOG_TYPE_ID_TRACE, (Level), LGD_MODULE_NAME, __FILE__, __LINE__, __func__, true, (Fmt), __VA_ARGS__)
#else
#define LG_LOG_TRACE( Level, Fmt, ...)
#endif
#define LG_LOG_INFO( Fmt, ...) LG_Log( LGD_LOG_TYPE_ID_INFO, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, __func__, true, (Fmt), __VA_ARGS__)
#define LG_LOG_WARNING( Fmt, ...) LG_Log( LGD_LOG_TYPE_ID_WARNING, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, __func__, true, (Fmt), __VA_ARGS__)
#define LG_LOG_ERROR( Fmt, ...) LG_Log( LGD_LOG_TYPE_ID_ERROR, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, __func__, true, (Fmt), __VA_ARGS__)
#define LG_STACK_TRACE( Level, ...) LG_Stack_Trace( (Level), LGD_MODULE_NAME, __FILE__, __LINE__, __func__, true)
/*----------------------------------------------------------------------------*/
/* Log Writer */
/*----------------------------------------------------------------------------*/
typedef LGT_Status (*LGT_Log_Writer_Ptr)( FILE *, LGT_Log_Type_Id, char *, va_list);
#define LGD_LOG_STREAM_DEFAULT ( FILE *)NULL
#define LGD_LOG_WRITER_DEFAULT ( LGT_Log_Writer_Ptr)NULL
/*----------------------------------------------------------------------------*/
/* Public Prototypes */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* LG_Library_Open */
/*----------------------------------------------------------------------------*/
/* (I) Log_Writer_Ptr: Log writer pointer */
/* (I) Header_Print_Flag: Start by printing an header */
/*----------------------------------------------------------------------------*/
LGD_API LGT_Status LG_Library_Open( LGT_Log_Writer_Ptr, bool);
/*----------------------------------------------------------------------------*/
/* LG_Library_Close */
/*----------------------------------------------------------------------------*/
/* (I) Footer_Print_Flag: End by printing an header */
/*----------------------------------------------------------------------------*/
LGD_API LGT_Status LG_Library_Close( bool);
/*----------------------------------------------------------------------------*/
/* LG_Log_Stream_Get */
/*----------------------------------------------------------------------------*/
/* (O) Log_Stream_Ptr_Ptr: Log output stream */
/*----------------------------------------------------------------------------*/
LGD_API LGT_Status LG_Log_Stream_Get( FILE **);
/*----------------------------------------------------------------------------*/
/* LG_Log_Stream_Set */
/*----------------------------------------------------------------------------*/
/* (I) Log_Stream_Ptr: Log output stream */
/*----------------------------------------------------------------------------*/
LGD_API LGT_Status LG_Log_Stream_Set( FILE *);
/*----------------------------------------------------------------------------*/
/* LG_Log */
/*----------------------------------------------------------------------------*/
LGD_API LGT_Status LG_Log( LGT_Log_Type_Id, LGT_Log_Level, char *, const char *, const long, const char *, bool, char *, ...);
/*------------------------------------------------------------------------------*/
/* LG_Stack_Trace_Print */
/*------------------------------------------------------------------------------*/
LGD_API LGT_Status LG_Stack_Trace( LGT_Log_Level, char *, const char *, const long, const char *, bool);
/*----------------------------------------------------------------------------*/
#endif // ifndef _LIBLOG_H_