00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef eman__log__h__
00037 #define eman__log__h__ 1
00038
00039 #include <cstdarg>
00040 #include <string>
00041
00042 using std::string;
00043
00044 namespace EMAN
00045 {
00046 #if 1
00047 #ifndef __func__
00048 #define __func__ ""
00049 #endif
00050 #endif
00051
00052 #define ENTERFUNC LOGDEBUG("Enter ")
00053 #define EXITFUNC LOGDEBUG("Exit ")
00054
00055 #define LOGERR Log::logger()->loc(Log::ERROR_LOG, __FILE__, __LINE__, __func__); Log::logger()->error
00056
00057 #define LOGWARN Log::logger()->loc(Log::WARNING_LOG, __FILE__, __LINE__, __func__); Log::logger()->warn
00058
00059 #define LOGDEBUG Log::logger()->loc(Log::DEBUG_LOG, __FILE__, __LINE__, __func__); Log::logger()->debug
00060
00061 #define LOGVAR Log::logger()->loc(Log::VARIABLE_LOG, __FILE__, __LINE__, __func__); Log::logger()->variable
00062
00063
00072 class Log
00073 {
00074 public:
00075 enum LogLevel
00076 {
00077 ERROR_LOG,
00078 WARNING_LOG,
00079 DEBUG_LOG,
00080 VARIABLE_LOG
00081 };
00082
00083 public:
00084 static Log *logger();
00085
00087 int begin(int argc, char *argv[], int ppid);
00088 void end(int ref, const string& file = "-", const string& text ="");
00089
00092 void error(const char *format, ...);
00093
00096 void warn(const char *format, ...);
00097
00100 void debug(const char *format, ...);
00101
00104 void variable(const char *format, ...);
00105
00106 void set_level(int level);
00107
00111 void set_logfile(const char *filename);
00112
00113 void loc(LogLevel level, const string & file, int linenum, const string & func);
00114
00115 private:
00116 Log();
00117 Log(const Log &);
00118 ~Log();
00119
00120 void vlog(const char *format, LogLevel level, va_list arg);
00121
00122 static Log *instance;
00123 FILE *out;
00124 LogLevel log_level;
00125 string default_emandir;
00126 string default_emanlog;
00127 string location;
00128 };
00129 }
00130
00131 #endif