00001 #ifndef MYTHLOGGING_H_
00002 #define MYTHLOGGING_H_
00003
00004 #ifdef __cplusplus
00005 #include <QString>
00006 #endif
00007 #include <stdint.h>
00008 #include <errno.h>
00009
00010 #include "mythbaseexp.h"
00011 #include "verbosedefs.h"
00012
00013 #ifdef __cplusplus
00014 extern "C" {
00015 #endif
00016
00017
00018 #define VERBOSE_LEVEL_NONE (verboseMask == 0)
00019 #define VERBOSE_LEVEL_CHECK(_MASK_, _LEVEL_) \
00020 (((verboseMask & (_MASK_)) == (_MASK_)) && logLevel >= (_LEVEL_))
00021
00022 #define VERBOSE please_use_LOG_instead_of_VERBOSE
00023
00024
00025
00026
00027
00028
00029 #ifdef __cplusplus
00030 #define LOG(_MASK_, _LEVEL_, _STRING_) \
00031 do { \
00032 if (VERBOSE_LEVEL_CHECK((_MASK_), (_LEVEL_)) && ((_LEVEL_)>=0)) \
00033 { \
00034 LogPrintLine(_MASK_, (LogLevel_t)_LEVEL_, \
00035 __FILE__, __LINE__, __FUNCTION__, 1, \
00036 QString(_STRING_).toLocal8Bit().constData()); \
00037 } \
00038 } while (false)
00039 #else
00040 #define LOG(_MASK_, _LEVEL_, _FORMAT_, ...) \
00041 do { \
00042 if (VERBOSE_LEVEL_CHECK((_MASK_), (_LEVEL_)) && ((_LEVEL_)>=0)) \
00043 { \
00044 LogPrintLine(_MASK_, (LogLevel_t)_LEVEL_, \
00045 __FILE__, __LINE__, __FUNCTION__, 0, \
00046 (const char *)_FORMAT_, ##__VA_ARGS__); \
00047 } \
00048 } while (0)
00049 #endif
00050
00051
00052 MBASE_PUBLIC void LogPrintLine( uint64_t mask, LogLevel_t level,
00053 const char *file, int line,
00054 const char *function, int fromQString,
00055 const char *format, ... );
00056
00057 extern MBASE_PUBLIC LogLevel_t logLevel;
00058 extern MBASE_PUBLIC uint64_t verboseMask;
00059
00060 #ifdef __cplusplus
00061 }
00062
00063 extern MBASE_PUBLIC QString logPropagateArgs;
00064 extern MBASE_PUBLIC QString verboseString;
00065
00066 MBASE_PUBLIC void logStart(QString logfile, int progress = 0, int quiet = 0,
00067 int facility = 0, LogLevel_t level = LOG_INFO,
00068 bool dblog = true, bool propagate = false);
00069 MBASE_PUBLIC void logStop(void);
00070 MBASE_PUBLIC void logPropagateCalc(void);
00071 MBASE_PUBLIC bool logPropagateQuiet(void);
00072
00073 MBASE_PUBLIC int syslogGetFacility(QString facility);
00074 MBASE_PUBLIC LogLevel_t logLevelGet(QString level);
00075 MBASE_PUBLIC QString logLevelGetName(LogLevel_t level);
00076 MBASE_PUBLIC int verboseArgParse(QString arg);
00077
00079 MBASE_PUBLIC QString logStrerror(int errnum);
00080
00086 #define ENO (QString("\n\t\t\teno: ") + logStrerror(errno))
00087 #define ENO_STR ENO.toLocal8Bit().constData()
00088 #endif // __cplusplus
00089
00090 #endif
00091
00092
00093
00094