log4j.properties配置学习

来源:互联网 发布:redis查询所有数据库 编辑:程序博客网 时间:2024/06/07 16:13

最近在学习ssh框架见到的项目中基本都会有log4j.properties文件,log4j.properties是用来设置记录器的级别、存放器和布局的,可以使用键值对格式和xml格式进行配置。通过配置,可以创建出log4j的运行环境。

配置文件的基本格式为:

#配置根Loggerlog4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …#配置日志信息输出目的地Appenderlog4j.appender.appenderName  =  全路径类名log4j.appender.appenderName.option1  =  value1   … log4j.appender.appenderName.optionN  =  valueN #配置日志信息的格式(布局)log4j.appender.appenderName.layout  =  全路径类名log4j.appender.appenderName.layout.option1  =  value1   … log4j.appender.appenderName.layout.optionN  =  valueN #log4j是配置前缀,每一行有效的配置都不能少,标志着属于log4j配置

由上可以看出log4j 三个主要组件:

1、Loggers(记录器):记录日志的工具,程序中就是用它来记录我们想要类型的日志信息。

2、Appenders (输出源):日志输出到什么地方,可以是控制台、文件、流位置、数据库,等等。

3、Layouts(布局模式):日志需要记录哪些基本信息,用什么样的格式去记录展示这些信息。一个 Logger 最少要有一个 Appender,一个 Appender 有一个 Layout。

Logger

log4j.rootLogger = [ level ] , appenderName1, appenderName2, …

rootLogger代表根记录器,[ level ] 定义的是日志级别LEVEL,也就是该 Logger 应该从哪个级别开始记录日志,日志本身从高到低共分八个级别:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL,这些都定义在 org.apache.log4j.Level 类中。定义日志级别后,该 Logger 就只会记录高于或等于该级别的日志信息,低于该级别的日志信息不会被记录。常用的日志级别有四个:ERROR、WARN、INFO、DEBUG,rootLogger的默认级别为DEBUG。
appenderName1, appenderName2, … 指的是 Appenders(输出源) 的名字。
“log4j.rootLogger=DEBUG, demo” 这句配置的意思就是 “根 Logger 记录 DEBUG 级别以上或等于DEBUG级别的日志,并将这些日志输出到demo 输出源”

Appenders
在 Log4j 中,输出源类型就是 “org.apache.log4j.Appender” 接口的实现类,定义一个 Appender(输出源) 的格式是:

log4j.appender.appenderName=className

appenderName 是 Appender 的别名,自定义的,可以随便取,Logger 引用的就是这个名字。上面的例子中输出源名字是 stdout。

className 是 Appender 的全路径类名,Log4j 已经定义了很多的 Appender 类型,列举几个常用的 Appender 类型:

org.apache.log4j.ConsoleAppender(标准输出,控制台)org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppender(文件,每天一个)org.apache.log4j.RollingFileAppender(文件,超出最大容量限制后另起一个文件)org.apache.log4j.WriterAppender(以流格式发送日志信息到指定的地方)

Appender可以Threshold属性指定要输出的日志级别
Layouts
在 Log4j 中,Layout 类型都是 “org.apache.log4j.Layout” 抽象类的子类,布局模式 Layout 是用来匹配输出源 Appender 的一个属性,也就是说,每一个输出源都要对应匹配一个布局模式。

Layout 配置格式:

log4j.appender.appenderName.layout=className

其中appenderName 是 Appender 的名字,对应某个已经定义了的 Appender。className 是 Layout 的全路径类名,同样的,在 Log4j 中,定义了很多的 Layout 类型,常用的有:

org.apache.log4j.HTMLLayout(HTML表格布局)org.apache.log4j.PatternLayout(类似正则,格式化输出,非常灵活,最常用的布局模式)org.apache.log4j.SimpleLayout(简单布局,只含日志级别和日志信息字符串)org.apache.log4j.TTCCLayout(该布局包含产生线程、日志级别、产生类、日志信息字符串等内容)

在定义了使用何种Layout布局模式后,我们还需进一步指明具体格式,就好像题型是一样的,但是具体的题目会不同。

具体格式的配置:

log4j.appender.appenderName.layout.ConversionPattern=format

appenderName: Appender名称,对应某个已定义的 Appender。

ConversionPattern=format :就是 PatternLayout 布局模式下的具体格式。format 可选用格式:

%p:日志优先级,即 DEBUG,INFO,WARN,ERROR,FATAL。%d:日志产生的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。%r:自应用程序启动到输出该日志信息耗费的毫秒数。%t:产生该日志的线程名。%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括全路径类名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。%c:日志信息所属类目,通常就是所在类的全路径名称。%M:产生日志信息的方法名。%F:产生日志的文件名称。%L::在代码中产生日志的行号。%m::代码中自定义的具体日志信息字符串。%n:输出一个回车换行符,Windows平台为"rn",Unix平台为"n"。%x:输出和当前线程相关联的NDC(嵌套诊断环境),类似 java servlet 这样的多客户多线程的应用中会使用。%%:输出一个"%"字符。在%和格式字符之间还可以指定文本长度以及对齐方式:%20M: 文本最小占用20个字符,默认右对齐。%-20M: 文本最小占用20个字符,左对齐。%.20M: 文本最大占用20个字符,超出部分字符从左边开始截断。

PS:Logger还具有继承特性,由 Logger 的标识字段 additivity 控制的,它的默认值是 true,表示继承,将其改为 false 即表示不继承。(这里的继承是从直系父亲继承,不会间接继承)。

最后
我们可以通过Logger获得想要类型的日志信息,然后通过Appender指定日志信息存放的地方,最后通过Layouts指定日志信息按什么布局模式进行输出