blob: b7815d63bcc82239d88c72cca435dc42a010fd87 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#ifndef LOGGER__H
#define LOGGER__H
#include <fstream>
#include <mutex.h>
#include <config.h>
namespace newsbeuter {
enum loglevel { LOG_NONE = 0, LOG_USERERROR, LOG_CRITICAL, LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG };
class logger {
public:
static logger &getInstance();
void set_logfile(const char * logfile);
void set_errorlogfile(const char * logfile);
void set_loglevel(loglevel level);
void log(loglevel level, const char * format, ...);
private:
logger();
logger(const logger &) {}
logger& operator=(const logger &) { return *this; }
~logger() { }
loglevel curlevel;
mutex logMutex;
static mutex instanceMutex;
std::fstream f;
std::fstream ef;
};
}
// see http://kernelnewbies.org/FAQ/DoWhile0
#ifdef NDEBUG
#define LOG(x, ...) do { } while(0)
#else
#define LOG(x, ...) do { logger::getInstance().log(x, __VA_ARGS__); } while(0)
#endif
#endif
|