log4cplus之基本使用方法及示例
VS2019配置log4cplus
C++ 设计实现日志系统 提示:这篇文章重点看,不错
C++日志库log4cplus快速入门
log4cplus_demo
可以了解make类似的工具Scons
文章目录
- 系列参考文章
- 前言
- 一、准备
- 二、编译步骤
- 1. 建立Cmake编译输出目录log4cplus
- 2. 设置环境变量
- 3. 设置编译器
- 3.1 configure->选择编译器为MinGW Makefiles
- 3.2 点击下一步,选择好对应的gcc,g++编译器;
- 4. Configure配置选项
- 5. 编译
- 三、使用步骤
- 1.测试库
- 2.配置文件
- 3. 单列日志类
- 4. 使用
- 5.资源包
- 总结
前言
利用Cmake 编译相应的库,从而方便QT MINGW73_64调用,MSVC 编译器同理
一、准备
-
log3.0以上版本,编译器版本要支持c++17
-
安装cmake (cmake3.21.3版本)
-
从github下载文件Catch-master.zip和ThreadPool-master.zip log4cplus-2.0.7
-
其他下载链接、官方文档
将Catch-master.zip和ThreadPool-master.zip分别解压到log4cplus源码下catch和threadpool目录
2. 设置环境变量一个是QT 的mingw以及cmake的
3. 设置编译器 3.1 configure->选择编译器为MinGW Makefiles 3.2 点击下一步,选择好对应的gcc,g++编译器;D:/Qt/Qt5.12.11/Tools/mingw730_64/bin/gcc.exe
D:/Qt/Qt5.12.11/Tools/mingw730_64/bin/g++.exe
勾选LOG4CPLUS_QT5,并设置好Qt5Core_DIR,然后点击Configure->Generate
上一步没报错就用mingw32-make编译,用管理员权限打开PowerShell
说明:把log4cplus下bin目录生成的库文件liblog4cplusU.dll, liblog4cplusqt5debugappenderU.dll拷贝到测试工程
如果要使用qt5debugappender,请把 liblog4cplusqt5debugappenderU.dll 和
liblog4cplusqt5debugappenderU.dll.a 也加到LIBS中来
INCLUDEPATH += $$PWD3rdpartyinclude LIBS += -L$$PWD3rdpartylibs -lliblog4cplusU2.配置文件
配置文件log.properties控制日志文件的生成,写个单例日志类读取配置文件
# ALL TRACE DEBUG INFO WARN ERROR FATAL OFF
log4cplus.rootLogger = TRACE,SA
log4cplus.logger.logConsole = TRACE,LC
#For database stuff, I don't need to logging everything, it's enough printing only errors!
#log4cplus.logger.DatabaseOperations=ERROR
#log4cplus.additivity.file=false
log4cplus.appender.LC=log4cplus::ConsoleAppender
log4cplus.appender.LC.EnCoding=utf-8
log4cplus.appender.LC.layout=log4cplus::PatternLayout
log4cplus.appender.LC.layout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S}] %m [%l]%n
#设置日志追加到文件尾
log4cplus.appender.SA=log4cplus::TimeBasedRollingFileAppender
log4cplus.appender.SA.File = Mylogger.log
# 必须要先手动创建好log目录;否则无法创建文件
log4cplus.appender.SA.FilenamePattern= ./log/%d{yyyy-MM-dd_HH-mm}.log
log4cplus.appender.SA.Schedule = MINUTELY
log4cplus.appender.SA.CreateDirs = true
log4cplus.appender.SA.MaxHistory = 9999
log4cplus.appender.SA.RollOnClose = false
#设置日志文件大小
log4cplus.appender.SA.MaxFileSize = 100MB
#设置生成日志最大个数
log4cplus.appender.SA.MaxBackupIndex = 100
log4cplus.appender.SA.Append = true
log4cplus.appender.SA.layout=log4cplus::PatternLayout
log4cplus.appender.SA.layout.ConversionPattern=[%-5p][%D{%m/%d/%y %H:%M:%S:%Q}] [%t] %c - %m [%l]%n
#设置日志级别范围
log4cplus.appender.SA.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.SA.filters.1.LogLevelMin=DEBUG
log4cplus.appender.SA.filters.1.LogLevelMax=FATAL
log4cplus.appender.SA.filters.1.AcceptOnMatch=true
log4cplus.appender.SA.filters.2=log4cplus::spi::DenyAllFilter
3. 单列日志类
MyLogger.h
#ifndef MYLOGGER_H #define MYLOGGER_H #include#include #include #include #include #include #include #include #include #include #include #include #include #include #define MY_LOG_FILE "log.properties" using namespace std; using namespace log4cplus; using namespace log4cplus::helpers; //懒汉单列模式 class MyLogger { public: static MyLogger* getInstace(); //static void deleteInstance(); Logger logger; Logger console; private: MyLogger(); ~MyLogger(){ cout << "Destory singleton for log4cplus!!" < public: Garbo(){} ~Garbo(){ if(m_logger != NULL){ delete m_logger; m_logger = nullptr; } } }; static Garbo _garbo; }; #endif // MYLOGGER_H
MyLogger.cpp
#include "mylogger.h"
MyLogger* MyLogger::m_logger = NULL;
mutex MyLogger::myMutex;
MyLogger::Garbo MyLogger::_garbo;
MyLogger *MyLogger::getInstace()
{
if(NULL == m_logger){
lock_guard mg(myMutex);
if(NULL == m_logger){
m_logger =new MyLogger;//在堆上建立
}
}
return m_logger;
}
MyLogger::MyLogger()
{
log4cplus::initialize();
PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT(MY_LOG_FILE));
logger = Logger::getRoot();
console = Logger::getInstance(LOG4CPLUS_TEXT("logConsole"));
cout<<"Create Singleton for log4cplus!"<
4. 使用
MyLogger *pMyLogger = NULL;
pMyLogger= MyLogger::getInstace();
LOG4CPLUS_WARN(pMyLogger->logger, LOG4CPLUS_TEXT("Hello, World!"));
5.资源包
这是我编译好的Bin包和相关软件
总结
这是对QT 环境下log4cplus配置的一个说明,以及对log4cplus的一个了解!



