00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef _rlog_incl_
00021
#define _rlog_incl_
00022
00023
#define CONCAT2(A,B) A##B
00024
#define CONCAT(A,B) CONCAT2(A,B)
00025
#define STR(X) #X
00026
00027
#include <rlog/common.h>
00028
00034
00035
#define CURRENT_RLOG_VERSION 20040503
00036
extern "C" int RLogVersion();
00037
00038
namespace rlog
00039 {
00040
00041
class RLogChannel;
00042
class RLogPublisher;
00043
class RLogNode;
00044
00048
enum LogLevel
00049 {
00050 Log_Undef =0,
00051 Log_Critical,
00052 Log_Error,
00053 Log_Warning,
00054 Log_Notice,
00055 Log_Info,
00056 Log_Debug
00057 };
00058
00069
void RLOG_DECL RLogInit(
int &argc,
char **argv);
00070
00071
00072
00073 RLOG_DECL
RLogChannel *GetComponentChannel(
const char *component,
00074
const char *path,
00075 LogLevel level = Log_Undef);
00076
00077
00078 RLOG_DECL
RLogChannel *GetGlobalChannel(
const char *path,
00079 LogLevel level = Log_Undef);
00080
00124
#define DEF_CHANNEL(path,level) RLOG_CHANNEL_IMPL(RLOG_COMPONENT, path, level)
00125
#define RLOG_CHANNEL(path) RLOG_CHANNEL_IMPL(RLOG_COMPONENT, path, rlog::Log_Undef)
00126
#define RLOG_CHANNEL_IMPL(COMPONENT,path,level) \
00127
rlog::GetComponentChannel(STR(COMPONENT),path,level)
00128
00129
00130
00131
00132
00133
00134
00135
00136
extern RLOG_DECL
RLogChannel *_RLDebugChannel;
00137
extern RLOG_DECL
RLogChannel *_RLInfoChannel;
00138
extern RLOG_DECL
RLogChannel *_RLWarningChannel;
00139
extern RLOG_DECL
RLogChannel *_RLErrorChannel;
00140
00153
struct PublishLoc
00154 {
00155
00156
00157
00158
00160 void (*publish)(PublishLoc *,
RLogChannel *,
const char *format, ... )
00161 PRINTF_FP(3,4);
00162
RLogNode *pub;
00163
const char *component;
00164
const char *fileName;
00165
const char *functionName;
00166
int lineNum;
00167
RLogChannel *channel;
00168 };
00169
00176
void RLOG_DECL RLog_Register(PublishLoc *loc,
RLogChannel *,
00177
const char *format, ... ) PRINTF(3,4);
00178
00184
void RLOG_DECL rAssertFailed( const
char *component, const
char *file,
00185 const
char *function,
int line,
00186 const
char *conditionStr );
00187
00188
00189
00190 #if !HAVE_PRINTF_FP && HAVE_PRINTF_ATTR
00191
void __checkArgs(
int, const
char *, ... ) PRINTF(2,3);
00192
00193 inline
void __checkArgs(
int, const
char *, ...)
00194 { }
00195
#endif
00196
}
00197
00198
#if C99_VARIADAC_MACROS
00199
#include <rlog/rlog-c99.h>
00200
#elif PREC99_VARIADAC_MACROS
00201
#include <rlog/rlog-prec99.h>
00202
#else
00203
#include <rlog/rlog-novariadac.h>
00204
#endif
00205
00206
00207
#define _rAssertFailed(COMPONENT, COND) \
00208
rlog::rAssertFailed(STR(COMPONENT),__FILE__,__FUNCTION__,__LINE__, COND)
00209
00220
#define rAssert( cond ) \
00221
do { \
00222
if( unlikely((cond) == false) ) \
00223
{ rError( "Assert failed: " STR(cond) ); \
00224
_rAssertFailed(RLOG_COMPONENT, STR(cond)); \
00225
} \
00226
} while(0)
00227
00235
#define rAssertSilent( cond ) \
00236
do { \
00237
if( unlikely((cond) == false) ) \
00238
{ _rAssertFailed(RLOG_COMPONENT, STR(cond)); } \
00239
} while(0)
00240
00241
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
#define RLOG_NO_COPY(CNAME) \
00256
private: \
00257
CNAME(const CNAME&); \
00258
CNAME & operator = (const CNAME &)
00259
00260
00261
#endif // rlog.h
00262