log4cplus 是 log4j 的 C++ 实现,提供的接口和使用逻辑与 log4j 基本保持一致;有 log4j 使用经验的人使用 log4cplus 是一件很愉快的事情。
下载
源码仓库地址 https://github.com/log4cplus/log4cplus
编译安装
依次执行以下语句
tar xvf log4cplus-2.0.6.tar.xz
cd log4cplus-2.0.6
mkdir build
cd build
cmake ..
make
sudo make install
Logger:记录日志的句柄
Appender:用于指定内容的输出位置,如:控制台,文件、远程服务器等;一个 Logger 可添加多个 Appender,从而向多个地方输出日志。
Layout:用于指定日志输出的格式;每个 Appender 需要设置一个 Layout
日志等级:FATAL, ERROR, WARN, INFO, DEBUG, TRACE,由高到低
使用步骤
示例
CMakeLists.txt
find_package(log4cplus)
target_link_libraries(${PROJECT_NAME} log4cplus::log4cplus)
main.cpp
#include <iostream>
#include <log4cplus/log4cplus.h>
void log()
{
auto logger = log4cplus::Logger::getInstance("test");
LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("fun"));
}
int main()
{
// 控制台Appender
log4cplus::SharedAppenderPtr consoleAppender(new log4cplus::ConsoleAppender());
consoleAppender->setLayout(std::unique_ptr<log4cplus::Layout>(new log4cplus::SimpleLayout));
// 文件Appender
log4cplus::SharedAppenderPtr fileAppender(new log4cplus::FileAppender("log.log",std::ios_base::app));
const char *pattern = "%D{ %Y-%m-%d %H:%M:%S.%q} %5p %c: %m (%l)%n";
fileAppender->setLayout(std::unique_ptr<log4cplus::Layout>(new log4cplus::PatternLayout(pattern)));
// 获取实例
auto logger = log4cplus::Logger::getInstance("test");
logger.setLogLevel(log4cplus::INFO_LOG_LEVEL);
// 加上Appender
logger.addAppender(consoleAppender);
logger.addAppender(fileAppender);
// 输出日志
LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("main"));
LOG4CPLUS_ERROR(logger, LOG4CPLUS_TEXT("main"));
log();
return 0;
}
运行结果
控制台
INFO - main
ERROR - main
INFO - fun
log.log 文件
2021-06-24 14:44:47.199 INFO test: main (/mnt/d/Document/Documents/CLion/log4cplusdemo/main.cpp:23)
2021-06-24 14:44:47.200 ERROR test: main (/mnt/d/Document/Documents/CLion/log4cplusdemo/main.cpp:24)
2021-06-24 14:44:47.200 INFO test: fun (/mnt/d/Document/Documents/CLion/log4cplusdemo/main.cpp:7)
可以看到,在log函数内获取test实例也是可以使用的,所以一个 Logger 实例被配置后,将一直存在于程序中,在程序的任何地方都可通过实例名称获取到这个Logger,不用重新配置。
使用 CLion 开发的话,可以使用插件 Grep Console
实现不同的日志级别对应不同的颜色。
我自己的配色如下
等级 RGB颜色
FATAL CC666E
ERROR CC666E
WARN ABC023
INFO 5394EC
DEBUG 299999
TRACE 999999
如果不是 CLion;Linux 终端配色方案可以参考《ANSI 兼容终端颜色控制》
这篇文章提到的都是用代码配置,每次改配置还需要重新编译代码。用过 log4j 的应该都知道使用配置文件配置是很灵活的,所以 lo4cplus 也是提供了通过配置文件配置的。具体使用方式请参考《log4cplus配置文件》
由于个人水平有限,文中若有不合理或不正确的地方欢迎指出改正
若文中个人文章链接打不开,请在站内寻找同名文章
文章可能更新不及时,请以个人博客处文章为准