1.log4cplus基本元素
Layouts :控制输出信息的格式
Appenders :输出对象,是输出到控制台,还是输出到文件
Logger :日志对象,所要输出的信息
Priorities :优先权,包括TRACE,DEBUG,INFO,WARNING,ERROR,FATAL
2.log4cplus基本结构
3.使用步骤
l 生成Appender对象
l 生成Layout对象,并绑定到Appender。(可选)
l 生成Logger对象
l 设置Logger优先级。(可选)
l 将需要关联Logger的Appender添加到Logger上。
l 使用Logger输出信息,所有大于设定的优先级的信息,并在所有挂接在该Logger对象上的Appender上以相应的Layout设定的格式显示出来
log4cplus内容介绍
1.Logger对象
Logger对象具有层次结构,按名称区分,如下代码:
Logger test = Logger::getInstance(“test”);
Logger subtest = Logger::getInstance(“test.subtest”);
对象subtest是test的子对象
2.Layout格式输出
l SimpleLayout
是一种简单格式的布局器,在输出的原始信息之前加上LogLevel和一个”-”。
l TTCCLayout
其格式有时间,线程ID,Logger和NDC组成。
l PatternLayout
是一种有词法分析功能的模式布局器,类似正则表达式。以”%”作为开头
(1)"%%",转义为% 。
(2)"%c",输出logger名称,如test.subtest 。也可以控制logger名称的显示层次,比如"%c{1}"时输出"test",其中数字表示层次。
(3)"%D",显示本地时间,比如:"2004-10-1618:55:45",%d显示标准时间。 可以通过%d{...}定义更详细的显示格式,比如%d{%H:%M:%s}表示要显示小时:分钟:秒。大括号中可显示的
(4)"%F",输出当前记录器所在的文件名称,比如"main.cpp"
(5)"%L",输出当前记录器所在的文件行号,比如"51"
(6)"%l",输出当前记录器所在的文件名称和行号,比如"main.cpp:51"
(7)"%m",输出原始信息。
(8)"%n",换行符。
(9)"%p",输出LogLevel,比如"DEBUG"
(10)"%t",输出记录器所在的线程ID,比如 "1075298944"
(11)"%x",嵌套诊断上下文NDC (nesteddiagnostic context) 输出,从堆栈中弹出上下文信息,NDC可以用对不同源的log信息(同时地)交叉输出进行区分。
(12)格式对齐,比如"%-10m"时表示左对齐,宽度是10,当然其它的控制字符也可以相同的方式来使用,比如"%-12d","%-5p"等等。
3.Appender输出位置
l 控制台输出
ConsoleAppender
l 文件输出
FileAppender/RollingFileAppender/DailyRollingFileAppender
l FileAppender :
实现了基本的文件操作功能,构造函数如下:
l FileAppender(filename,mode,immediateFlush);
<filename >文件名
<mode> 文件类型,可选择的文件类型包括app,ate,binary,in,out,trunc。缺省是trunc,表示将先前文件删除。
<immediateFlush>缓冲刷新标志.
l RollingFileAppender:
RollingFileAppender(filename,maxFileSize,maxBackupIndex,immediateFlush)
filename : 文件名
maxFileSize : 文件的最大尺寸
maxBackupIndex : 最大记录文件数
immediateFlush : 缓冲刷新标志
l DailyRollingFileAppender:
DailyRollingFileAppender(filename, schedule,immediateFlush, maxBackupIndex)
filename : 文件名
schedule : 存储频度
immediateFlush : 缓冲刷新标志
maxBackupIndex : 最大记录文件数
4.举例代码
l 输出到控制台
l 输出到文件
5.把设置移动到配置文件中
log4cplus通过PropertyConfigurtor类实现了基于脚本配置的功能,通过脚本可以完成对logger、appender和layout的配置
配置步骤:
l 配置Appender名称
枚举:
log4cplus.appender.AppenderName1= log4cplus::ConsoleAppender
log4cplus.appender.AppenderName2= log4cplus::FileAppender
log4cplus.appender.AppenderName3= log4cplus::RollingFileAppender
log4cplus.appender.AppenderName4= log4cplus::DailyRollingFileAppender
log4cplus.appender.AppenderName5= log4cplus::SocketAppender
l 配置Layout
可以选择不设置、TTCCLayout或PatternLayout
设置TTCCLayout如下所示:
log4cplus.appender.AppenderName.layout= log4cplus::TTCCLayout
设置PatternLayout如下所示:
log4cplus.appender.AppenderName.layout= log4cplus::PatternLayout
log4cplus.appender.AppenderName.layout.ConversionPattern= %d [%t] <%-5p> - %m%n
l 配置Filter
可选择的Filter,LogLevelMatchFilter,LogLevelRangeFilter和StringMatchFilter
设置之后输出的内容会有所改变
l 配置Logger
对于RootLogger如下所示:
log4cplus.rootLogger= [LogLevel],appenderName,appenderName,…..
对于non-root logger如下所示:
log4cplus.logger.logger_name= [LogLevel|INHERITED],appenderName,…..
l 加载配置
PropertyConfigurator::doConfigure(“log4cplus.cfg”);
5.1.举例代码
l 对Appender对象进行配置,包括设置Appender名称,Layout和Filter及相关参数。
设置Appender名称及参数如下:
log4cplus.appender.AppenderName=log4cplus::FileAppender
log4cplus.appender.AppenderName.File=d:\testlog.log
设置Layout及参数,如:
log4cplus.appender.AppenderName.layout=log4cplus::PatternLayout
log4cplus.appender.AppenderName.layout.ConversionPattern = %d [%t] %-5p - %m%n
设置Filter及参数,如:
log4cplus.appender.AppenderName.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.AppenderName.filters.1.LogLevelMin=DEBUG
log4cplus.appender.AppenderName.filters.1.LogLevelMax=INFO
log4cplus.appender.AppenderName.filters.1.AcceptOnMatch=true
log4cplus.appender.AppenderName.filters.2=log4cplus::spi::DenyAllFilter
l 设置Logger对象
log4cplus.rootLogger= TRACE,AppenderName1,AppenderName2
将以上配置保存到文件,比如:d:\log4cplus.cfg中,则使用如下