【转】总结_C++日志系统log4cxx使用

转自:总结_C++日志系统log4cxx使用_OneByOne-CSDN博客_log4cxx

C++日志系统log4cxx使用总结

参考连接:

log4CXX第二篇---配置文件(properties文件)详解_crazyhacking的专栏-CSDN博客

C++日志系统log4cxx使用总结_邵明_新浪博客

一、log4cxx组件介绍

log4cxx有三个主要组件:loggers(记录器),appenders(输出源)和layout(布局)。可以简单理解为日志类别,要输出的地方,输出形式。

1) Loggers

2) Appenders

3) Layouts

综合使用三大组件可以轻松记录信息的类别和级别,并可以在运行时控制日志输出的样式和位置。

1、 Logger

a. Logger的命名特点

1. Logger是由一个String类型的名字识别的,且大小写敏感2. 名字之间具有继承关系,其中,子名有父名做前缀,用"."分隔。如, x.y是x.y.z的父名。3. root logger是所有logger的祖先,是一直存在的,通过Logger.getRootLogger()获得,并且不能通过名字获得。4. public static Logger Logger.getLogger(String name)获得或者创建一个Logger。

b. Logger的日志级别

1.  每个logger都被分配了一个日志级别(log level),用来控制日志信息的输出。2.  未被分配level的logger可以继承它最近的父logger的level。若父logger也没有设置level,则将继承root logger的level。3.  每条输出到logger的日志请求(logging request)也都有一个level,如LOG4CXX_DEBUG4.  如果logging request的level大于等于该logger的level,则该request将被处理,否则将被忽略eg. logger的level是ERROR,request的level是DEBUG,则request的内容不会在日志中输出。但若request的level是ERROR,则会在日志中输出。5. 所有的logger level及大小关系:Level.ALL < Level.DEBUG < Level.INFO < Level.WARN < Level.ERROR < Level.FATAL < Level.OFF

2、 Appenders

除了禁用和使用日志的log4cxx基本功能,log4cxx还提供更强大的功能,比如,允许把日志输出到不同地方,如控制台、文件等,根据天数或文件大小产生新的文件,再或者可以以流的形式发送到其他地方等。

a. appender常见类

org.apache.log4j.ConsoleAppender        (控制台)
org.apache.log4j.FileAppender            (文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender     (文件大小达到指定尺寸时产生一个新的文件)
org.apache.log4j.WriterAppender          (将日志信息以流格式发送到任意指定的地方)

b. appender的使用

配置模式:

log4j.appender.appenderName = className
log4j.appender.appenderName.Option1 = value1
...
log4j.appender.appenderName.optionN = valueN

使用举例:

log4j.rootLogger=INFO,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

c. appender类使用时的option解析

1) ConsoleAppender选项

Threshold = WARN : 指定日志信息的最低输出级别,默认为DEBUG
ImmediateFlush = true : 表示所有消息都被立即输出,设为false则不输出, 默认值为true
Target = System.err : 默认值是System.out

2) FileAppender选项

Threshold = WARN 
ImmediateFlush = true
Append = false : true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true
File = D:/logs/logging.log4j : 指定消息输出的文件目录名

3) DailyRollingFileAppender选项

Threshold = WARN 
ImmediateFlush = true
Append = false
File = D:/logs/logging.log4j
DatePattern = '.'yyyy-MM : 每个月生成一个新的日志文件'.'yyyy-ww : 每周'.'yyyy-MM-dd:每天'.'yyyy-MM-dd-a:每天2次'.'yyyy-MM-dd-HH:每小时'.'yyyy-MM-dd-HH-mm : 每分钟

4)RollingFileAppender选项

Threshold = WARN 
ImmediateFlush = true
Append = false
File = D:/logs/logging.log4j
MaxFileSize = 100KB :文件达到该大小时,会自动滚动,即将原来的内容移到logging.log4j.1文件中
MaxBackupIndex = 2 : 指定可以产生滚动文件的最大数,例如,设为2则可以产生logging.log4j.1, logging.log4j.2两个滚动文件和一个log

3、 Layouts

有时用户希望自定义日志输出格式,log4j.appender.appenderName后附加layouts来完成。

a. Layouts提供四种日志输出格式:

1. HTML样式 :  org.apache.log4j.HTMLLayout
2. 自由指定样式:org.apache.log4j.PatternLayout
3. 包含日志级别和信息字符串的样式:     org.apache.log4j.SimpleLayout
4. 包含日志产生的时间、线程、类别等信息:org.apache.log4j.TTCCLayout

使用举例:

log4j.appender.appenderName.layout = className
log4j.appender.appenderName.layout.Option1 = value1
...
log4j.appender.appenderName.layout.OptionN = valueN

b. layout使用option解析

1) HTMLLayout选项

LocaltionInfo = true : 输出java文件名和行号,默认值是false
Title = My Logging : 默认值是Log4j Log Messages

2)PatternLayout选项

ConversionPattern = %m%n : 设定以怎样的格式显示消息

格式化符号说明:

%p: 输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以指定格式,eg.%d{yyyy/MM/dd HH:mm:ss,SSS}。
%r: 输出自应用程序启动到输出到该log信息耗费额毫秒数
%t: 输出产生该日志事件的线程名
%l:  输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名及在代码行中的行数。eg.test.TestLog4j.main(TestLog4j.java:10)。
%c: logger所属类的全名,最小长度是20,若名称长度小于20,默认右对齐。
%M: 输出产生日志信息的方法名
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m:输出logger的日志消息,eg.LOG4CXX_DEBUG(m_logger,"日志消息")
%n:输出一个回车换行符,windows平台为"\r\n",Unix平台为"\n"
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中
%%:输出一个"%"字符

tips.

另外,还可以在%与格式字符之间加上修饰符,来控制器最小长度、最大长度、文本对齐方式。如:
1) %-20c : "-"号表示左对齐
2) %.30c : 指定%c最大长度为30,若大于30,会将左边多出来的字符截掉,但小于30也不会补空格

二、 简单的配置文件例子

Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties属性文件。下面以properties属性文件为例

#设置rootlogger为DEBUG级别,两个Appender
log4j.rootLogger=DEBUG,ca, fa#对Appender fa进行设置:这是一个文件类型的Appender,
#其输出文件(File)为./output.log,
#输出方式(Append)为覆盖方式,
#输出格式(layout)为PatternLayout
log4j.appender.fa=org.apache.log4j.FileAppender
log4j.appender.fa.File=./output.log
log4j.appender.fa.Append=false
log4j.appender.fa.layout=org.apache.log4j.PatternLayout
log4j.appender.fa.layout.ConversionPattern=%d[%t] %-5p %.16c - %m%n#对Appender ca进行设置:这是一个控制台类型的Appender
#输出格式(layout)为PatternLayout
log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern=%d[%t] %-5p %.16c - %m%n

三、配置文件详解

1. 配置root logger

log4j.rootLogger = [level],appenderName1,appenderName2,...**level**: 设定日志记录的最低级别,可设的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。**appenderName**:就是指日志信息要输出到哪里,可以同时指定多个输出目的,用逗号隔开,appenderName可以自定义。eg. log4j.rootLogger=INFO,A1,B2,C3

tips.

log4j.logger.cn.com.Test  = DEBUG,test
log4j.appender.test=org.apache.log4j.FileAppender
log4j.appender.test.File=${myweb.root}/WEB-INF/log/test.log
log4j.appender.test.layout=org.apache.log4j.PatternLayout
log4j.appender.test.layout.ConversionPattern=%d %p [%c] - %m%n
这是对名字为cn.com.Test的logger进行配置,从原有日志中分离,形成单独的日志文件。

2. 使用多个logger,并配置在一个配置文件

tips.

1. log4cxx库对日志流设置,只需要更改配置文件中的appender属性
2. log4cxx支持Logger继承机制,但由于要将日志流输出到多个文件,需要在配置文件中,将子Logger的继承属性设置为false

配置文件中配置子Logger

// 假设子logger的name为childLogger// 在配置文件中定义一个子logger的代码,apname为childlogger使用的appender
log4j.logger.childLogger = DEBUG,apname     // 设置子logger的继承属性设置为false
log4j.additivity.childLogger = false// 设置子logger所使用的日志文件
log4j.appender.apname.File = ./0.log

3. 特别的appender应用

a. 应用于socket

log4j.appender.socket=org.apache.log4j.RollingFileAppender
log4j.appender.socket.RemoteHost=localhost
log4j.appender.socket.Port=5001
log4j.appender.socket.LocationInfo=true

b. 发送日志到指定邮件

log4j.appender.mail=org.apache.log4j.net.SMTPAppender
log4j.appender.mail.Threshold=FATAL
log4j.appender.mail.BufferSize=10
log4j.appender.mail.From = xxx@mail.com
log4j.appender.mail.SMTPHost=mail.com
log4j.appender.mail.Subject=Log4J Message
log4j.appender.mail.To= xxx@mail.com
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

c. 应用于数据库

log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.database.URL=jdbc:mysql://localhost:3306/test
log4j.appender.database.driver=com.mysql.jdbc.Driver
log4j.appender.database.user=root
log4j.appender.database.password=
log4j.appender.database.sql=INSERT INTO LOG4J (Message) VALUES('=[%-5p] %d(%r) --> [%t] %l: %m %x %n')
log4j.appender.database.layout=org.apache.log4j.PatternLayout
log4j.appender.database.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

d. 自定义Appender

log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

三、NDC

未完待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

S3c2440A平台HIVE注册表+binfs的实现

我的例子是基于samsung S3C2440A&#xff0b;samsung ONENANDWinCE5.0的&#xff0c;开发平台是platform builder 5.0&#xff0c;首先我们基于RAM register的image已经可以正常跑起来了&#xff0c;Flash除了放置image外其他的空间为用户提供文件系统&#xff0c;这部分的驱动…

DHT

DHT 类似Tracker的根据种子特征码返回种子信息的网络.DHT全称叫分布式哈希表(Distributed Hash Table)&#xff0c;是一种分布式存储方法。在不需要服务器的情况下&#xff0c;每个客户端负责一个小范围的路由&#xff0c;并负责存储一小部分数据&#xff0c;从而实现整个DHT网…

【转】日志记录库(log4cxx)使用指南

转自&#xff1a;日志记录库&#xff08;log4cxx&#xff09;使用指南_外环西路-CSDN博客 一、Log4j、log4cxx简介 Log4j、log4cxx有三个主要的组件&#xff1a; Loggers(记录器)&#xff0c;Appenders (输出源)和Layouts(布局)。Loggers(记录器)&#xff1a; 负责执行记录日…

WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(11)-BINFS在Nand上的实现(Multi-Bin的实现)

之前我们都是把整个系统镜像复制到RAM中运行,这样启动时间较慢,也占用内存.使用Multi-Bin的模式,将需要复制到RAM的组件和可存放在存储设备(如Nand)中的组件分开,系统启动时只需要将CE核心组件复制到内存中运行,然后需要的组件从Nand中读取即可.之前我们已经在eboot中添加了操作…

C# 数据库连接字符串集合

c#数据库连接字符串集合(一)常用连接:1.使用SqlConnection对象: a. Sql 验证public void SqlConnectionOpen(){SqlConnection conn new SqlConnection();conn.ConnectionString "user idsa;password;initial catalognorthwind;datasourcelocalhost;connect Timeout20&quo…

【转】聊聊Linux操作系统中的显示管理器及如何更换

转自&#xff1a;聊聊Linux操作系统中的显示管理器及如何更换 - linux-123 - 博客园 聊聊Linux操作系统中的显示管理器及如何更换 | 《Linux就该这么学》 什么是 Linux 中的显示管理器&#xff1f; 简单来说&#xff0c;显示管理器display manager&#xff08;DM&#xff09…

winCE改变字库方法(WINCE字库更新)

更新系统字库&#xff1a;例如要在WinCE5.0加入微软雅黑字体的支持。 第一步&#xff1a;增加如下注册表 [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/FontPath] "FontPath""// Windows " ; 字库文件所在目录 [HKEY_LOCAL_MACHINE/SYSTEM/GDI] "Fon…

【转】[WSL2]WSL2迁移虚拟磁盘文件ext4.vhdx

转自&#xff1a;[WSL2]WSL2迁移虚拟磁盘文件ext4.vhdx_Ryan ZHENG的专栏-CSDN博客 WSL2本质上是一个虚拟机&#xff0c;因此必然存在磁盘镜像文件。 默认情况下&#xff0c;这个镜像文件会放在C盘&#xff08;参考官网举例&#xff1a;%LOCALAPPDATA%\Packages<PackageFa…

WINCE字体动态加载

1. 加载字体 if (NULL ! AddFontResource(SDBOOTDisk\\FZY3JW.ttf)) ::SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0); else AfxMessageBox(L"加载方正准圆简体字体失败!"); 2.创建字体并设置控件字体 CFont hFontNew&#xff1b; LOGFONT lf; …

ckedit 3.0 配置(一)

个人喜欢使用config.js的方式来使用&#xff0c;下面以此为例&#xff0c;介绍其配置参数。&#xff08;所示为默认值&#xff09;//当提交包含有此编辑器的表单时&#xff0c;是否自动更新元素内的数据config.autoUpdateElement true //编辑器的z-index值 config.baseFloatZI…

【转】Ubuntu中SVN客户端安装+使用

转自&#xff1a;Ubuntu中SVN客户端安装使用_三少GG-CSDN博客 1、 安装 svn客户端&#xff1a; apt-get install subversion&#xff0c;然后根据提示一步一步&#xff0c;就完成了 svn的安装。当然&#xff0c;也可以源码安装 svn&#xff0c;下载 subversion 一个最新版本的源…

x210烧写流程(inand)

今天拿到了x210的开发板&#xff0c;按照手册里的流程无法烧写。后资讯了客服后&#xff0c;才知道我的x210板子是inand的。而手册上讲的是nandflash板子的烧写流程。 以防忘记&#xff0c;把板子的烧写流程记录在此。 1. 拨码开关(OM0 - OM5)调成101101(irom)方式。 2. 打开DN…

【转】Linux命令行下svn ignore忽略文件或文件夹用法

转自&#xff1a;Linux命令行下svn ignore忽略文件或文件夹用法 - 陌上归人的博客 - 博客园 一、忽略单个目录 1、忽略文件夹 假如目录oa.youxi.com是从svn checkout出来的&#xff0c;在服务器本地目录添加了material&#xff0c;但是不希望把material加入版本控制&#xf…

避免Eclipse经常出现Out Of Memory

修改eclipse.ini -showsplash org.eclipse.platform --launcher.XXMaxPermSize 512m -vmargs -Xms256m -Xmx512m -XX:PermSize128M -XX:MaxPermSize128M Eclipse jee galileo DownLoad转载于:https://www.cnblogs.com/sun-li/archive/2010/01/18/1650900.html

PB编译错误:Mismatched time stamp on .rel file for module nk.exe requesting kernel fixup. Valid .rel file

如题&#xff0c;PB编译完后make时出现如下错误&#xff1a; Mismatched time stamp on .rel file for module nk.exe requesting kernel fixup. Valid .rel file is required for kernel fixups. 先Copy一下&#xff0c;再Make即可。 总结&#xff1a;很多情况下&#xff0c;…

【转】CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法

转自&#xff1a;​​​​​​CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法_Absolute Zero-CSDN博客_反投影法 绪 在做CT图像处理的时候遇到很多问题&#xff0c;对于滤波反变换有许多细节存在疑问&#xff0c;经过多天查找资料和利用MATLAB程序一步步实…

JS 对象介绍

JavaScript is an Object Oriented Programming (OOP) language. JS是面向对象的编程语言&#xff08;面向对象&#xff09;。 An OOP language allows you to define your own objects and make your own variable types.OOP语言可以让你自定义对象和变量类型。 -------------…

DNW应用程序错误,DNW错误问题解决

三星的USB驱动一直不是很稳定&#xff0c;有时候调2450&#xff0c;6410的时候&#xff0c;经常会把桌面系统搞得蓝屏。严重的时候&#xff0c;DNW都无法打开&#xff0c;提示DNW应用程序错误。很多人被难在这里了&#xff0c;只能重装系统。其实并不用重装系统&#xff0c;只用…

【转】交织容积重建技术:基本原理与临床价值

转自&#xff1a;交织容积重建技术&#xff1a;基本原理与临床价值_湃客_澎湃新闻-The Paper 原创 赵喜同学 XI区 单击上方蓝色字体 XI 区 或长按识别下方二维码关注我 大家好&#xff0c;欢迎大家访问XI区&#xff01; 所有医学成像系统的目标是从测量数据中提取最大数量的诊…

Tahoma,Arial和宋体英文字体

几年前一直用简体中文版的Widnows XP&#xff0c;从来没有觉得字体怎么怎么样。偶然看见英文版Windows XP就发现菜单或者文件夹的字体很好看&#xff0c;没怎么研究就把我的中文版XP换成了英文版并沿用至今。后来很久才知道可以在Control Panel -> Display -> Appearance…