00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef ARLOG_H
00028 #define ARLOG_H
00029
00030 #ifndef WIN32
00031 #include <stdio.h>
00032 #endif
00033 #include <string>
00034 #include "ariaTypedefs.h"
00035 #include "ArMutex.h"
00036 #include "ArFunctor.h"
00037
00038 class ArConfig;
00039
00041
00048 class ArLog
00049 {
00050 public:
00051
00052 typedef enum {
00053 StdOut,
00054 StdErr,
00055 File,
00056 Colbert,
00057 None
00058 } LogType;
00059 typedef enum {
00060 Terse,
00061 Normal,
00062 Verbose
00063 } LogLevel;
00064
00065 #ifndef SWIG
00066
00067 static void log(LogLevel level, const char *str, ...);
00068 #endif
00071 static void logPlain(LogLevel level, const char *str);
00072
00073 static bool init(LogType type, LogLevel level,
00074 const char *fileName="",
00075 bool logTime = false, bool alsoPrint = false,
00076 bool printThisCall = true);
00078 static void close();
00079
00080 #ifndef SWIG // this is internal we don't need to wrap it
00081
00082 static void logNoLock(LogLevel level, const char *str, ...);
00083 #endif
00084
00085 static void (* colbertPrint)(int i, const char *str);
00086
00088 static void addToConfig(ArConfig *config);
00089 protected:
00090 static bool processFile(void);
00091
00092 static ArLog *ourLog;
00093 static ArMutex ourMutex;
00094 static LogType ourType;
00095 static LogLevel ourLevel;
00096 static bool ourLoggingTime;
00097 static FILE *ourFP;
00098 static int ourColbertStream;
00099 static std::string ourFileName;
00100 static bool ourAlsoPrint;
00101
00102 static LogType ourConfigLogType;
00103 static LogLevel ourConfigLogLevel;
00104 static char ourConfigFileName[1024];
00105 static bool ourConfigLogTime;
00106 static bool ourConfigAlsoPrint;
00107 static ArGlobalRetFunctor<bool> ourConfigProcessFileCB;
00108 };
00109
00110
00111 #endif