Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 11ee69f

Browse files
committed
1. Multiple file appenders can be created. 2. log library only needs log4cplusplus.dll
1 parent 74199b2 commit 11ee69f

File tree

6 files changed

+254
-164
lines changed

6 files changed

+254
-164
lines changed

‎README.md

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,35 @@
22

33
基于 log4cplus 封装的自用的 C++ 日志库
44

5+
## Feature
6+
7+
* [x] 线程安全
8+
* [x] 支持异步
9+
* [x] 支持中文路径和内容
10+
* [x] 支持输出到文件、控制台、调试器
11+
* [x] 支持格式化打印
12+
513
## 示例
614

715
```cpp
816
#include "log4cplusplus.h"
917

1018
int main(int argc, char *argv[])
1119
{
12-
log4cplus::Log4CPlusPlus* log = GetLog4CPlusPlusInstance();
20+
log4cplus::Log4CPlusPlus* log = CreateLog4CPlusPlus();
1321
if (log)
1422
{
15-
log->Init();
16-
log->EnableDebuggerOutput(true);
17-
log->EnableConsoleOutput(true);
23+
log->AddFileAppender();
24+
log->EnableDebuggerAppender(true);
25+
log->EnableConsoleAppender(true);
1826

19-
LOG4CPLUSPLUS_DEBUG(L"log test");
20-
LOG4CPLUSPLUS_INFO(L"log test %s", L"info");
21-
LOG4CPLUSPLUS_WARN(L"log test %s %d", L"warn", 123);
22-
LOG4CPLUSPLUS_ERROR(L"log test %f", 3.14);
27+
LOG4CPLUSPLUS_DEBUG(log, L"log test");
28+
LOG4CPLUSPLUS_INFO(log, L"log test %s", L"info");
29+
LOG4CPLUSPLUS_WARN(log, L"log test %s %d", L"warn", 123);
30+
LOG4CPLUSPLUS_ERROR(log, L"log test %f", 3.14);
31+
LOG4CPLUSPLUS_ERROR(log, L"中文日志测试!!");
2332

24-
log->UnInit();
33+
log->Release();
2534
}
2635
return 0;
2736
}

‎log4cplusplus/include/log4cplusplus.h

Lines changed: 58 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,30 +12,47 @@
1212
#endif
1313

1414
// 调试日志
15-
#define LOG4CPLUSPLUS_DEBUG(...)\
15+
#define LOG4CPLUSPLUS_DEBUG(pLog4CPlusPlus, ...)\
1616
{\
17-
GetLog4CPlusPlusInstance()->WriteLog(log4cplus::LogDebugLevel, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__);\
17+
if(pLog4CPlusPlus)\
18+
{\
19+
pLog4CPlusPlus->WriteLog(log4cplus::LogDebugLevel, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__);\
20+
}\
1821
}
1922

2023
// 普通日志
21-
#define LOG4CPLUSPLUS_INFO(...)\
24+
#define LOG4CPLUSPLUS_INFO(pLog4CPlusPlus, ...)\
2225
{\
23-
GetLog4CPlusPlusInstance()->WriteLog(log4cplus::LogInfoLevel, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__);\
26+
if(pLog4CPlusPlus)\
27+
{\
28+
pLog4CPlusPlus->WriteLog(log4cplus::LogInfoLevel, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__);\
29+
}\
2430
}
2531

2632
// 警告日志
27-
#define LOG4CPLUSPLUS_WARN(...)\
33+
#define LOG4CPLUSPLUS_WARN(pLog4CPlusPlus, ...)\
2834
{\
29-
GetLog4CPlusPlusInstance()->WriteLog(log4cplus::LogWarnLevel, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__);\
35+
if(pLog4CPlusPlus)\
36+
{\
37+
pLog4CPlusPlus->WriteLog(log4cplus::LogWarnLevel, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__);\
38+
}\
3039
}
3140

3241
// 错误日志
33-
#define LOG4CPLUSPLUS_ERROR(...)\
42+
#define LOG4CPLUSPLUS_ERROR(pLog4CPlusPlus, ...)\
3443
{\
35-
GetLog4CPlusPlusInstance()->WriteLog(log4cplus::LogErrorLevel, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__);\
44+
if(pLog4CPlusPlus)\
45+
{\
46+
pLog4CPlusPlus->WriteLog(log4cplus::LogErrorLevel, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__);\
47+
}\
3648
}
3749

38-
#define DEFALT_LOG_FILE_NAME L"log.log"
50+
#define DEFALT_LOG_FILE_PATH L"" // 默认日志文件路径
51+
#define DEFALT_LOG_FILE_NAME L"log.log" // 默认日志文件名
52+
#define DEFALT_MAX_FILE_SIZE 10 * 1024 * 1024 // 默认最大文件大小
53+
#define DEFALT_MAX_FILE_COUNT 100 // 默认最大文件备份数量
54+
#define DEFALT_IS_ASYNC true // 默认异步
55+
#define DEFALT_MAX_DAYS_COUNT 15 // 默认最多保留日志天数
3956

4057
namespace log4cplus
4158
{
@@ -50,30 +67,45 @@ namespace log4cplus
5067
class Log4CPlusPlus
5168
{
5269
public:
70+
Log4CPlusPlus() {}
5371
virtual ~Log4CPlusPlus() {}
5472

5573
public:
5674
/*
57-
初始化日志
75+
释放日志资源
76+
*/
77+
virtual void Release() = 0;
78+
79+
/*
80+
添加文件附加器
5881
* file_path 日志基础文件路径,如传入 D:\\code,最终生成 D:\\code\\log\2020円-6-4\\
5982
* file_name 日志文件名,如 log.log
83+
* max_file_size 最大文件大小
84+
* max_file_count 最大文件数
85+
* is_async 是否异步
6086
*/
61-
virtual void Init(const wchar_t *file_path = L"", const wchar_t *file_name = DEFALT_LOG_FILE_NAME) = 0;
62-
87+
virtual void AddFileAppender(
88+
const wchar_t *file_path = DEFALT_LOG_FILE_PATH,
89+
const wchar_t *file_name = DEFALT_LOG_FILE_NAME,
90+
unsigned long max_file_size = DEFALT_MAX_FILE_SIZE,
91+
unsigned long max_file_count = DEFALT_MAX_FILE_COUNT,
92+
bool is_async = DEFALT_IS_ASYNC
93+
) = 0;
94+
6395
/*
64-
反初始化日志
96+
启用调试器附加器,如 VS调试窗口
6597
*/
66-
virtual void UnInit() = 0;
98+
virtual void EnableDebuggerAppender(bool enable) = 0;
6799

68100
/*
69-
日志同时输出到调试器,如 VS调试窗口
101+
启用控制台附加器,如 cmd
70102
*/
71-
virtual void EnableDebuggerOutput(bool enable) = 0;
103+
virtual void EnableConsoleAppender(bool enable) = 0;
72104

73105
/*
74-
日志同时输出到控制台,如 cmd
106+
获取日志的路径
75107
*/
76-
virtual voidEnableConsoleOutput(bool enable) = 0;
108+
virtual constwchar_t * GetLogPath() = 0;
77109

78110
/*
79111
打印日志,支持格式化字符串
@@ -83,18 +115,16 @@ namespace log4cplus
83115
* function 打印日志代码所在的类及方法
84116
* format, ... 格式化字符串,如 L"Hello %s %d", L"World", 123
85117
*/
86-
virtual void WriteLog(Log4CPlusPlusLevel logLevel, const char* file, int line, const char* function, const wchar_t *format, ...) = 0;
87-
88-
protected:
89-
Log4CPlusPlus() {}
90-
91-
private:
92-
Log4CPlusPlus(const Log4CPlusPlus&) = delete;
93-
Log4CPlusPlus& operator = (const Log4CPlusPlus&) = delete;
118+
virtual void WriteLog(
119+
Log4CPlusPlusLevel logLevel,
120+
const char* file,
121+
int line,
122+
const char* function,
123+
const wchar_t *format, ...) = 0;
94124

95125
};
96126
}
97127

98-
extern "C" LOG4CPLUSPLUS_API log4cplus::Log4CPlusPlus* __cdecl GetLog4CPlusPlusInstance();
128+
extern "C" LOG4CPLUSPLUS_API log4cplus::Log4CPlusPlus* __cdecl CreateLog4CPlusPlus();
99129

100-
#endif // _LOG4CPLUSPLUS_H_
130+
#endif // _LOG4CPLUSPLUS_H_

‎log4cplusplus/src/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ add_library(log4cplusplus SHARED
1818
log4cplusplusimp.h
1919
)
2020

21-
target_link_libraries(log4cplusplus debug log4cplusUD optimized log4cplusU)
21+
target_link_libraries(log4cplusplus debug log4cplusUD Ws2_32optimized log4cplusUWs2_32)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /