Add request type(/m3u) for Vu+PlayerHD (IOS).
[vuplus_transtreamproxy] / src / Logger.h
1 /*
2  * Logger.h
3  *
4  *  Created on: 2014. 2. 7.
5  *      Author: oskwon
6  */
7
8 #ifndef LOGGER_H_
9 #define LOGGER_H_
10
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <stdarg.h>
14 #include <stdint.h>
15 //----------------------------------------------------------------------
16
17 #define MAX_PRINT_LEN   2048
18 #define DEFAULT_TIMESTAMP_FORMAT "%Y%m%d-%H%M%S"
19
20 #ifdef _DISABLE_LOGGER
21 #       define ERROR(fmt,...)   {}
22 #       define WARNING(fmt,...) {}
23 #       define INFO(fmt,...)    {}
24 #       define DEBUG(fmt,...)   {}
25 #       define LOG(fmt,...)     {}
26 #       define LINESTAMP(fmt,...)  {}
27 #       define HEXLOG(fmt,...)  {}
28 #       define DUMMY(fmt,...)   {}
29 #else
30 #       define ERROR(fmt,...)  { Logger::instance()->log(Logger::ERROR,   fmt" (%s, %s:%d)", ##__VA_ARGS__, __FILE__, __FUNCTION__, __LINE__); }
31 #       define WARNING(fmt,...){ Logger::instance()->log(Logger::WARNING, fmt" (%s, %s:%d)", ##__VA_ARGS__, __FILE__, __FUNCTION__, __LINE__); }
32 #       define INFO(fmt,...)   { Logger::instance()->log(Logger::INFO,    fmt" (%s, %s:%d)", ##__VA_ARGS__, __FILE__, __FUNCTION__, __LINE__); }
33 #       define DEBUG(fmt,...)  { Logger::instance()->log(Logger::DEBUG,   fmt" (%s, %s:%d)", ##__VA_ARGS__, __FILE__, __FUNCTION__, __LINE__); }
34 #       define LOG(fmt,...)    { Logger::instance()->log(Logger::LOG,     fmt" (%s, %s:%d)", ##__VA_ARGS__, __FILE__, __FUNCTION__, __LINE__); }
35 #       define LINESTAMP(fmt,...)  { Logger::instance()->log(fmt" (%s, %s:%d)", ##__VA_ARGS__, __FILE__, __FUNCTION__, __LINE__); }
36 #       define HEXLOG(header, buffer, length) { Logger::instance()->hexlog(header, buffer, length, " (%s, %s:%d)", __FILE__, __FUNCTION__, __LINE__); }
37 #       define DUMMY(fmt,...)  { Logger::instance()->log(fmt, ##__VA_ARGS__); }
38 #endif /* USE_DEBUG */
39 //----------------------------------------------------------------------
40
41 class Logger
42 {
43 private:
44         int mLogLevel, mPid;
45         FILE* mLogHandle;
46
47         static Logger* mInstHandle;
48
49 private:
50         Logger();
51         virtual ~Logger();
52
53         static void logger_release()
54         {
55                 if (mInstHandle) {
56                         if (Logger::instance()->get_level() >= Logger::INFO) {
57                                 DUMMY("Logger Released.");
58                         }
59                         delete mInstHandle;
60                 }
61         };
62
63 public:
64         enum { NONE = 0, ERROR, WARNING, INFO, DEBUG, LOG };
65
66 #ifndef _DISABLE_LOGGER
67         bool init(const char* aFileName = 0, int aLogLevel = Logger::ERROR, bool aWithTimestamp = false);
68
69         void log(const char* aFormat, ...);
70         void log(int aLogLevel, const char* aFormat, ...);
71         void hexlog(const char *header, const char *buffer, const int length, const char *aFormat, ...);
72
73         static Logger* instance();
74 #endif
75
76         void set_pid();
77         int get_level() { return mLogLevel; }
78 };
79 //----------------------------------------------------------------------
80
81 #endif /* ULOGGER_H_ */