log4j配置祥解

来源:互联网 发布:sql数据库获取当前时间 编辑:程序博客网 时间:2024/05/31 15:19

Log4j配置有3个重要的概念:日志记录器(Logger)、输出地(Appender)以及日志格式化器(Layout)。其中,Logger负责记录日志,Appender负责输出到什么地方,Layout负责以什么样的格式输出、输出哪些附加信息(例如时间、类名、方法名、所在行数等等)


一、日志记录器Logger

### set log levels - for more verbose logging change 'info' to 'debug' ###log4j.rootLogger=warn, stdout 

1、在log.properties配置中,log4j.logger后面配置的是Logger,log4j.appender后面配置的是appender输出地。如上面的配置为该Logger为warn级别,输出地为stdout


2、根记录器rootLogger:rootLogger是所有Logger的父类,根记录器配置一般有5个级别(其实不止,还有ALL、TRACE等):

FATAL        0 - 严重错误  
ERROR      3 - 错误
WARN        4 - 警告
INFO          6  -一般信息
DEBUG      7  -调试信息


这边配置的是大于等于配置的级别。例如配置的是WARN,则会显示3个级别的信息,WARN、ERROR、FATAL        

3、各个子记录器配置Logger——任何子记录器都可以继承rootLogger的配置

#log4j.logger.org.hibernate=info#log4j.logger.org.hibernate=debuglog4j.logger.cn.com.lis=debug

1)原因分析:根配置如果配成WARN,则你代码中info和debug的信息都不会显示;而配成debug的话,在初始化的时候,spring和hibernate内部的输出会很多,造成一定的麻烦。


2)解决:根配置为WARN,并且多配置log4j.logger.cn.com.lis=debug,cn.com.lis是包名i(这边随意可以细化道具提的类),代表这个包下面的输出级别为debug。


3)这边子记录器可以只配置级别或者输出地,也可以两者都配置。


4)Logger还有一个类别(Category)的概念,类似于java中的package,效果跟Logger的名字等价;例如

# 作用于类别cn.itcast.oa下所有的Loggerlog4j.category.cn.itcast.oa=debug


二、输出地Appender


Appender表示日志输出到什么地方,常用的输出地有控制台、文件、数据库、远程服务器等。所有的Appender都实现自org.apache.log4j.Appender 接口。在log4j.properties 中,Appender都使用log4j.appender.*配置。


1、输出到控制台(ConsoleAppender)

log4j.rootLogger=warn, Console  # 根记录器,WARN,输出到 Consolelog4j.logger.cn.lis = debug# 本子记录器为 DEBUG 级别,针对 cn.lis 包log4j.appender.Console=org.apache.log4j.ConsoleAppender# 设置 Console 地点为控制台输出 ConsoleAppenderlog4j.appender.Console.Threshold = debug# DEBUG 以上级别是输出log4j.appender.Console.Encoding = UTF-8# 编码方式log4j.appender.Console.ImmediateFlush = true# 是否立即输出log4j.appender.Console.Target = System.err# 使用 System.err 输出log4j.appender.Console.layout=org.apache.log4j.PatternLayout # 输出格式,表达式配置log4j.appender.Console.layout.ConversionPattern=[SAM-Shop] [%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%-5p][%c] %m\n


1)控制台输出需要配置layout属性,最常用的是正则表达式格式。控制台输出的信息一般为TRANCE、DEBUG、或者INFO级别的,只在开发调试时才启用。


2)可选属性:

Encoding:设置编码方式; ImmediateFlush:设置是否缓存;Target:设置输出到Sysout.out还是Sysout.err; Threshold:用来设置该Appender的级别,只对本 Appender生效。


2、输出到文件(FileAppender)


文件输出把日志输出到指定文件。配置时需要用File指定文件名称。可以用时相对路径,也可以使用绝对路径。例如:


log4j.rootLogger=warn, f  # 根记录器,WARN,输出到 flog4j.logger.cn.lis = debug, f# 本子记录器为 DEBUG 级别,针对 cn.lis 包log4j.appender.f = org.apache.log4j.FileAppender# 设置 f 地点为输出到文件 FileAppenderlog4j.appender.f.File = C:\\log.text# 文件位置,相对路径和绝对路径都可以log4j.appender.f.Append = true# 追加文件内容log4j.appender.f.layout=org.apache.log4j.PatternLayout # 输出格式,表达式配置log4j.appender.Console.f.ConversionPattern=[SAM-Shop] [%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%-5p][%c] %m\n

可选参数Append配置是否在原文件内容上追加日志。如果为false, Logger初始化时会先清掉文件内容,也就是说每次重启程序,原来的日志会丢失。如果为true, 日志文件会越来越大。默认为true 。


3、输出到按大小滚动文件(RoollingFileAooender),是FileAppender的子类。


把日志输出指定文件,文件达到指定的大小时,会自动更名。需要配置文件名称,文件的最大尺寸,例如:


log4j.rootLogger=warn, f ,rolling_file # 根记录器,WARN,输出到 f 和 rolling_file两个地点# 配置地点f 的信息log4j.appender.f = org.apache.log4j.FileAppender# 设置 f 地点为输出到文件 FileAppenderlog4j.appender.f.File = C:\\log.text# 文件位置,相对路径和绝对路径都可以log4j.appender.f.Append = true# 追加文件内容log4j.appender.f.layout=org.apache.log4j.PatternLayout # 输出格式,表达式配置log4j.appender.Console.f.ConversionPattern=[SAM-Shop] [%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%-5p][%c] %m\n# 配置地点rolling_file 的信息log4j.appender.rolling_file=org.apache.log4j.RollingFileAppender# 设置 rolling_file 地点为输出到滚动文件 RollingFileAppenderlog4j.appender.rolling_file.Threshold=ERROR# ERROR以上才使用log4j.appender.rolling_file.File=C:\\rolling.log# 滚动文件名log4j.appender.rolling_file.Append=true# 追加方式log4j.appender.rolling_file.MaxFileSize=10KB# 文件到达10KB就自动更名log4j.appender.rolling_file.MaxBackupIndex=100# 最多备份100个文件log4j.appender.rolling_file.layout=org.apache.log4j.PatternLayout# 输出格式,表达式配置log4j.appender.rolling_file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%C]-[%p] %m%n

1)Logger 支持多个Appender, 用逗号分开即可。如上面就配置了2个输出地点。


2)配置滚动文件名为rolling.log, 文件大小为10KB。 当rolling.log达到10KB时,会自动更名为rolling.log.1、 rolling.log.2、 rolling.log.3 直到rolling.log.100 。


3、输出到按日期滚动文件(DailyRollingFileAppender)


按日期滚动文件输出将日志输出到指定文件,当容器发生变化时,会将文件按指定的日期格式自动更名。例如:


log4j.rootLogger=warn, dailly_rolling # 根记录器,WARN,输出到 dailly_rolling # 输出到按日期滚动文件log4j.appender.dailly_rolling=org.apache.log4j.DailyRollingFileAppender# 设置 dailly_rolling 地点为输出到日期滚动文件 DailyRollingFileAppenderlog4j.appender.dailly_rolling.File=C:\\daily_rolling.log# 滚动文件名及位置log4j.appender.dailly_rolling.DatePattern=.yyyy-MM-dd # 滚动日期格式log4j.appender.dailly_rolling.layout=org.apache.log4j.PatternLayout# 输出格式,表达式配置log4j.appender.dailly_rolling.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%C]-[%p] %m%n

1)日志文件名称为daily_rolling.log, 日期格式为yyyy-MM-dd。进入新的一天后, 文件会被自动更名,格式为daily_rolling.log.2014-09-06。


2)、输出到JDBC数据库(JDBCAender)、输出到Socket套接字、输出到SMTP邮件、自定义输出等略。



三、日志格式化器 Layout


1、简介:日志格式化器layut负责格式化日志信息。常用的格式化布局有PatternLayout布局(最常用)、HTMLLayout布局、XMLLayout布局。


2、PatternLayout布局(最常用)


PatternLayout布局是最常用的格式化器,用户可以自定义输出信息,例如日期、时间、所在的线程、类名、文件名、方法名、信息级别、文件行数等,例如:


log4j.rootLogger=warn, Consolelog4j.logger.cn.lis = debuglog4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.Threshold = debuglog4j.appender.Console.Encoding = UTF-8log4j.appender.Console.ImmediateFlush = truelog4j.appender.Console.Target = System.errlog4j.appender.Console.layout=org.apache.log4j.PatternLayout<span style="white-space:pre"></span>#最常用布局log4j.appender.Console.layout.ConversionPattern=[SAM-Shop] [%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%-5p][%c] %m%n

1)符号%d、 %C、%c、%p、%m、%n等后面的便是参数。

2)Log4j 中常用的参数见下面的表。























0 0
原创粉丝点击