/*----------------------------------------------------------------------------*/ /* 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 Drummer. If not, see */ /* . */ /*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/ /* Includes */ /*----------------------------------------------------------------------------*/ #ifndef _LIBLOG_H_ #define _LIBLOG_H_ #include #include #include #include #include #include #include /*----------------------------------------------------------------------------*/ /* 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 #define LG_LOG_TRACE_0( Level, Fmt) LG_Log( LGD_LOG_TYPE_ID_TRACE, (Level), LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt)) #define LG_LOG_TRACE_1( Level, Fmt, Arg1) LG_Log( LGD_LOG_TYPE_ID_TRACE, (Level), LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1)) #define LG_LOG_TRACE_2( Level, Fmt, Arg1, Arg2) LG_Log( LGD_LOG_TYPE_ID_TRACE, (Level), LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2)) #define LG_LOG_TRACE_3( Level, Fmt, Arg1, Arg2, Arg3) LG_Log( LGD_LOG_TYPE_ID_TRACE, (Level), LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3)) #define LG_LOG_TRACE_4( Level, Fmt, Arg1, Arg2, Arg3, Arg4) LG_Log( LGD_LOG_TYPE_ID_TRACE, (Level), LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3), (Arg4)) #define LG_LOG_TRACE_5( Level, Fmt, Arg1, Arg2, Arg3, Arg4, Arg5) LG_Log( LGD_LOG_TYPE_ID_TRACE, (Level), LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3), (Arg4), (Arg5)) #define LG_LOG_TRACE_6( Level, Fmt, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) LG_Log( LGD_LOG_TYPE_ID_TRACE, (Level), LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3), (Arg4), (Arg5), (Arg6)) #define LG_LOG_INFO_0( Fmt) LG_Log( LGD_LOG_TYPE_ID_INFO, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt)) #define LG_LOG_INFO_1( Fmt, Arg1) LG_Log( LGD_LOG_TYPE_ID_INFO, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1)) #define LG_LOG_INFO_2( Fmt, Arg1, Arg2) LG_Log( LGD_LOG_TYPE_ID_INFO, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2)) #define LG_LOG_INFO_3( Fmt, Arg1, Arg2, Arg3) LG_Log( LGD_LOG_TYPE_ID_INFO, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3)) #define LG_LOG_INFO_4( Fmt, Arg1, Arg2, Arg3, Arg4) LG_Log( LGD_LOG_TYPE_ID_INFO, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3), (Arg4)) #define LG_LOG_INFO_5( Fmt, Arg1, Arg2, Arg3, Arg4, Arg5) LG_Log( LGD_LOG_TYPE_ID_INFO, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3), (Arg4), (Arg5)) #define LG_LOG_INFO_6( Fmt, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) LG_Log( LGD_LOG_TYPE_ID_INFO, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3), (Arg4), (Arg5), (Arg6)) #define LG_LOG_WARNING_0( Fmt) LG_Log( LGD_LOG_TYPE_ID_WARNING, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt)) #define LG_LOG_WARNING_1( Fmt, Arg1) LG_Log( LGD_LOG_TYPE_ID_WARNING, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1)) #define LG_LOG_WARNING_2( Fmt, Arg1, Arg2) LG_Log( LGD_LOG_TYPE_ID_WARNING, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2)) #define LG_LOG_WARNING_3( Fmt, Arg1, Arg2, Arg3) LG_Log( LGD_LOG_TYPE_ID_WARNING, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3)) #define LG_LOG_WARNING_4( Fmt, Arg1, Arg2, Arg3, Arg4) LG_Log( LGD_LOG_TYPE_ID_WARNING, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3), (Arg4)) #define LG_LOG_WARNING_5( Fmt, Arg1, Arg2, Arg3, Arg4, Arg5) LG_Log( LGD_LOG_TYPE_ID_WARNING, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3), (Arg4), (Arg5)) #define LG_LOG_WARNING_6( Fmt, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) LG_Log( LGD_LOG_TYPE_ID_WARNING, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3), (Arg4), (Arg5), (Arg6)) #define LG_LOG_ERROR_0( Fmt) LG_Log( LGD_LOG_TYPE_ID_ERROR, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt)) #define LG_LOG_ERROR_1( Fmt, Arg1) LG_Log( LGD_LOG_TYPE_ID_ERROR, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1)) #define LG_LOG_ERROR_2( Fmt, Arg1, Arg2) LG_Log( LGD_LOG_TYPE_ID_ERROR, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2)) #define LG_LOG_ERROR_3( Fmt, Arg1, Arg2, Arg3) LG_Log( LGD_LOG_TYPE_ID_ERROR, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3)) #define LG_LOG_ERROR_4( Fmt, Arg1, Arg2, Arg3, Arg4) LG_Log( LGD_LOG_TYPE_ID_ERROR, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3), (Arg4)) #define LG_LOG_ERROR_5( Fmt, Arg1, Arg2, Arg3, Arg4, Arg5) LG_Log( LGD_LOG_TYPE_ID_ERROR, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3), (Arg4), (Arg5)) #define LG_LOG_ERROR_6( Fmt, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) LG_Log( LGD_LOG_TYPE_ID_ERROR, LGD_LOG_LEVEL_DEFAULT, LGD_MODULE_NAME, __FILE__, __LINE__, true, (Fmt), (Arg1), (Arg2), (Arg3), (Arg4), (Arg5), (Arg6)) #define LG_STACK_TRACE( Level) LG_Stack_Trace( (Level), LGD_MODULE_NAME, __FILE__, __LINE__, 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 *, char *, long, bool, char *, ...); /*------------------------------------------------------------------------------*/ /* LG_Stack_Trace_Print */ /*------------------------------------------------------------------------------*/ LGD_API LGT_Status LG_Stack_Trace( LGT_Log_Level, char *, char *, long, bool); /*----------------------------------------------------------------------------*/ #endif // ifndef _LIBLOG_H_