-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathday_roll_logger.h
139 lines (114 loc) · 3.72 KB
/
day_roll_logger.h
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
* day_roll_logger.h
*
* Created on: 2011-10-19
* Author: gxl2007@hotmail.com
*/
#ifndef DAY_ROLL_LOGGER_H_
#define DAY_ROLL_LOGGER_H_
#include <time.h>
namespace xlnet
{
/*
* @brief logger file rolled by day
*/
class day_roll_logger
{
public:
enum
{
LOG_LEVEL_NONE = 0 ,
LOG_LEVEL_ERROR = 1 ,
LOG_LEVEL_WARN = 2 ,
LOG_LEVEL_INFO = 3 ,
LOG_LEVEL_DEBUG = 4 ,
} ;
enum
{
MAX_PREFIX_SIZE = 1024 ,
MAX_LINE_SIZE = 4096 ,
};
enum
{
NONE_IOBUF_SIZE = 0 ,
MIN_IOBUF_SIZE = MAX_LINE_SIZE ,
MAX_IOBUF_SIZE = MAX_LINE_SIZE * 1000 ,
};
public:
/*
* @brief initialize the logger
* @param [in]: prefix - logger file prefix , prefix-xxxx-xx-xx.log
* @param [in]: log level
* @param [in]: buffer size , if < MIN_IOBUF_SIZE , means no buffer
* @return 0 if success
*/
int init(const char* prefix,int log_level,int buf_size = NONE_IOBUF_SIZE) ;
/*
* @brief clean up
*/
void fini() ;
/*
* @brief write formatted log data
* @param [in] log level
* @param [in] format string
* @param [in] data
*/
int write_format(int log_level,const char* fmt,...) ;
int write_string(int log_level,const char* content) ;
//int write_bin(int log_level,const char* buf,int len) ;
/*
* @brief flush buffered data to disk
*/
int flush() ;
short get_level() const { return m_level ; } ;
const char* get_prefix() const { return m_prefix ; } ;
public:
day_roll_logger();
~day_roll_logger();
private:
day_roll_logger(const day_roll_logger& ) ;
day_roll_logger& operator=(const day_roll_logger&) ;
private:
typedef struct
{
int size ;
int pos ;
char data[0] ;
} memory_buffer ;
private:
int prepare() ;
private:
int m_fd ;
int m_filedate ;
short m_level ;
short m_delay ;
memory_buffer* m_buf ;
char m_prefix[MAX_PREFIX_SIZE] ;
struct tm m_now ;
};
#ifdef NDEBUG
#define write_log_format(logger,level,fmt,args...) \
do{ logger.write_format(level,fmt,##args);} while(0)
#define write_log_string(logger,level,content) \
do{ logger.write_string(level,content);} while(0)
#else
#define write_log_format(logger,level, fmt,args...) \
do{ logger.write_format(level,"[%s:%d]" fmt , __FILE__,__LINE__,##args);} while(0)
#define write_log_string(logger,level,content) \
do{ logger.write_format(level,"[%s:%d]%s",__FILE__,__LINE__,content);} while(0)
#endif
#define error_log_format(logger, fmt ,args...) write_log_format(logger,xlnet::day_roll_logger::LOG_LEVEL_ERROR, fmt,##args)
#define warn_log_format(logger, fmt ,args...) write_log_format(logger,xlnet::day_roll_logger::LOG_LEVEL_WARN, fmt,##args)
#define info_log_format(logger, fmt ,args...) write_log_format(logger,xlnet::day_roll_logger::LOG_LEVEL_INFO, fmt,##args)
#define error_log_string(logger,content) write_log_string(logger,xlnet::day_roll_logger::LOG_LEVEL_ERROR,content)
#define warn_log_string(logger,content) write_log_string(logger,xlnet::day_roll_logger::LOG_LEVEL_WARN,content)
#define info_log_string(logger,content) write_log_string(logger,xlnet::day_roll_logger::LOG_LEVEL_INFO,content)
#ifdef NDEBUG
#define debug_log_format(logger,fmt,args...)
#define debug_log_string(logger,content)
#else
#define debug_log_format(logger,fmt,args...) write_log_format(logger,xlnet::day_roll_logger::LOG_LEVEL_DEBUG,fmt,##args)
#define debug_log_string(logger,content) write_log_format(logger,xlnet::day_roll_logger::LOG_LEVEL_DEBUG,content)
#endif
}
#endif /* DAY_ROLL_LOGGER_H_ */