log4cplus的配置文件使用方法
接上次使用代码配置log4cplus,本文从配置文件的角度对log4cplus进行配置。
如想代码控制配置log4cplus,请参考:Linux下 QT中 log4cplus 最基本配置及使用
1. 创建log4cplus配置文件
在项目构建目录的根目录下(即Debug或Release目录下)创建log4.config (此文件名自定义)
在文件中添加以下配置
log4cplus.rootLogger = TRACE, TRACE_MSGS, DEBUG_MSGS, ERROR_MSGS
log4cplus.appender.TRACE_MSGS = log4cplus::RollingFileAppender
log4cplus.appender.TRACE_MSGS.File = ./log/trace.log
log4cplus.appender.TRACE_MSGS.filters.1 = log4cplus::spi::LogLevelMatchFilter
log4cplus.appender.TRACE_MSGS.filters.1.LogLevelToMatch = TRACE
log4cplus.appender.TRACE_MSGS.filters.1.AcceptOnMatch=true
log4cplus.appender.TRACE_MSGS.filters.2=log4cplus::spi::DenyAllFilter
log4cplus.appender.TRACE_MSGS.MaxFileSize = 5MB
log4cplus.appender.TRACE_MSGS.MaxBackupIndex = 10
log4cplus.appender.TRACE_MSGS.Append = true
log4cplus.appender.TRACE_MSGS.ImmediateFlush = true
log4cplus.appender.TRACE_MSGS.layout = log4cplus::PatternLayout
log4cplus.appender.TRACE_MSGS.layout.ConversionPattern = [%D{%Y-%m-%d %H:%M:%S, %Q}] [threadID:%t] %-5p - %m%n
log4cplus.appender.DEBUG_MSGS = log4cplus::RollingFileAppender
log4cplus.appender.DEBUG_MSGS.File = ./log/debug.log
log4cplus.appender.DEBUG_MSGS.filters.1 = log4cplus::spi::LogLevelMatchFilter
log4cplus.appender.DEBUG_MSGS.filters.1.LogLevelMin=DEBUG
log4cplus.appender.DEBUG_MSGS.filters.1.LogLevelMax=INFO
log4cplus.appender.DEBUG_MSGS.filters.1.AcceptOnMatch=true
log4cplus.appender.DEBUG_MSGS.filters.2=log4cplus::spi::DenyAllFilter
log4cplus.appender.DEBUG_MSGS.MaxFileSize = 5MB
log4cplus.appender.DEBUG_MSGS.MaxBackupIndex = 10
log4cplus.appender.DEBUG_MSGS.Append = true
log4cplus.appender.DEBUG_MSGS.ImmediateFlush = true
log4cplus.appender.DEBUG_MSGS.layout = log4cplus::PatternLayout
log4cplus.appender.DEBUG_MSGS.layout.ConversionPattern = [%D{%Y-%m-%d %H:%M:%S, %Q}] [threadID:%t] %-5p - %m%n
log4cplus.appender.ERROR_MSGS = log4cplus::RollingFileAppender
log4cplus.appender.ERROR_MSGS.File = ./log/error.log
log4cplus.appender.ERROR_MSGS.filters.1=log4cplus::spi::StringMatchFilter
log4cplus.appender.ERROR_MSGS.filters.1.StringToMatch=ERROR
log4cplus.appender.ERROR_MSGS.filters.1.AcceptOnMatch=true
log4cplus.appender.ERROR_MSGS.filters.2=log4cplus::spi::DenyAllFilter
log4cplus.appender.ERROR_MSGS.MaxFileSize = 5MB
log4cplus.appender.ERROR_MSGS.MaxBackupIndex = 10
log4cplus.appender.ERROR_MSGS.Append = true
log4cplus.appender.ERROR_MSGS.ImmediateFlush = true
log4cplus.appender.ERROR_MSGS.layout = log4cplus::PatternLayout
log4cplus.appender.ERROR_MSGS.layout.ConversionPattern = [%D{%Y-%m-%d %H:%M:%S, %Q}] [threadID:%t] %-5p - %m%n
转换标识符介绍
PatterLayout 支持的转换标识符主要包括:
(1) "%%",转义为%, 即, std::string pattern = "%%" 时输出"%"。
(2) "%c",输出 logger 名称,比如 std::string pattern ="%c" 时输出: "test_logger.subtest",
也可以控制 logger 名称的显示层次,比如"%c{1}"时输出"test_logger",其中数字表示层次。
(3)"%D",显示本地时间,当 std::string pattern ="%D" 时输出:"2004-10-16 18:55:45",
%d 显示标准时间,所以当 std::string pattern ="%d" 时输出 "2004-10-16 10:55:45"
(因为北京时间位于东 8 区,差 8 个小时)。
可以通过%d{...}定义更详细的显示格式,比如%d{%H:%M:%s}表示要显示小时:分钟:秒。
大括号中可显示的预定义标识符如下:
%a -- 表示礼拜几,英文缩写形式,比如"Fri"
%A -- 表示礼拜几,比如"Friday"
%b -- 表示几月份,英文缩写形式,比如"Oct"
%B -- 表示几月份, "October"
%c -- 标准的日期+时间格式,如 "Sat Oct 16 18:56:19 2004"
%d -- 表示今天是这个月的几号(1-31)"16"
%H -- 表示当前时刻是几时(0-23),如 "18"
%I -- 表示当前时刻是几时(1-12),如 "6"
%j -- 表示今天是哪一天(1-366),如 "290"
%m -- 表示本月是哪一月(1-12),如 "10"
%M -- 表示当前时刻是哪一分钟(0-59),如 "59"
%p -- 表示现在是上午还是下午, AM or PM
%q -- 表示当前时刻中毫秒部分(0-999),如 "237"
%Q -- 表示当前时刻中带小数的毫秒部分(0-999.999),如 "430.732"
%S -- 表示当前时刻的多少秒(0-59),如 "32"
%U -- 表示本周是今年的第几个礼拜,以周日为第一天开始计算(0-53),如 "41"
%w -- 表示礼拜几, (0-6, 礼拜天为 0),如 "6"
%W -- 表示本周是今年的第几个礼拜,以周一为第一天开始计算(0-53),如 "41"
%x -- 标准的日期格式,如 "10/16/04"
%X -- 标准的时间格式,如 "19:02:34"
%y -- 两位数的年份(0-99),如 "04"
%Y -- 四位数的年份,如 "2004"
%Z -- 时区名,比如 "GMT"
(4) "%F",输出当前记录器所在的文件名称,比如 std::string pattern ="%F" 时输出:"main.cpp"。
(5) "%L",输出当前记录器所在的文件行号,比如 std::string pattern ="%L" 时输出: "51"
(6) "%l",输出当前记录器所在的文件名称和行号,比如 std::string pattern ="%L" 时输出"main.cpp:51"。
(7) "%m",输出原始信息,比如 std::string pattern ="%m" 时输出: "teststr",即上述代
码中 LOG4CPLUS_DEBUG 的第二个参数,这种实现机制可以确保原始信息被嵌入到带
格式的信息中。
(8) "%n",换行符,没什么好解释的。
(9) "%p",输出 LogLevel,比如 std::string pattern ="%p" 时输出: "DEBUG"。
( 10) "%t",输出记录器所在的线程 ID,比如 std::string pattern ="%t" 时输出:"1075298944"。
(11) "%x",嵌套诊断上下文 NDC (nested diagnostic context) 输出,从堆栈中弹出上下
文信息, NDC 可以用对不同源的 log 信息(同时地)交叉输出进行区分,关于 NDC 方
面的详细介绍会在下文中提到。
(12)格式对齐,比如 std::string pattern ="%-10m"时表示左对齐,宽度是 10,此时会输
出"teststr ",当然其它的控制字符也可以相同的方式来使用,比如"%-12d", "%-5p"
注意 :由于我将log文件存储到log文件夹中,所以在程序运行前需要手动新建一个log文件夹(如果需要可代码进行文件夹检查判断,自行解决)
2. log4cplus的使用
配置文件完成后,使用方法参考如下:
#include <log4cplus/logger.h>
#include <log4cplus/configurator.h>
#include <log4cplus/helpers/loglog.h>
#include <log4cplus/helpers/stringhelper.h>
#include <log4cplus/loggingmacros.h>
using namespace log4cplus;
using namespace log4cplus::helpers;
int main(void)
{
PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log4.config"));
Logger logger = Logger::getRoot();
// trace
LOG4CPLUS_TRACE(logger, "This is " << " trace...");
// debug
LOG4CPLUS_DEBUG(logger, "This is " << " debug...");
// info
LOG4CPLUS_INFO(logger,"This is " << " info...");
// warn
LOG4CPLUS_WARN(logger, "This is " << " warn...");
// error
LOG4CPLUS_ERROR(logger, "This is " << " error...");
//fatal
LOG4CPLUS_FATAL(logger, "This is " << " fatal...");
return 0;
}