【系统日志】log4j配置学习总结
博客专区 > 冷冷gg 的博客 > 博客详情
【系统日志】log4j配置学习总结
冷冷gg 发表于9个月前
【系统日志】log4j配置学习总结
  • 发表于 9个月前
  • 阅读 20
  • 收藏 0
  • 点赞 0
  • 评论 2
摘要: 使用了好长时间的log4j来打日志,但是一直没有去了解配置等,基本是copy其他项目,所有整理一下。

Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。

Logger

Loggers组件被分为五个级别:

  • DEBUG

  • INFO

  • WARN

  • ERROR

  • FATAL
    各个级别的顺序是这样那个的:

    DEBUG < INFO < WARN < ERROR < FATAL

可以简单地理解为级别越大越重要。

Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。

Appender

Appender用来规定日志输出的目的地是哪里,可以是控制台,文件,数据库等等。 常见的Appender有以下几种:

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

在配置文件中是这样配置的:

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

其中appenderName是Appender的名字,可以随意起,只要满足命名规范就行,Option1,Option2,…,OptionN是这个appender的各种属性。

Layout

Layout用来规定日志是以什么样的格式输出,需要输出哪些信息。Layout提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。 常见的Layout如下:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

在配置文件中这样配置的:

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

含义和Appender的配置是一样的,就不另作解释了。

配置详解

在实际应用中,要使Log4j在系统中运行须事先设定配置文件。配置文件事实上也就是对Logger、Appender及Layout进行相应设定。 Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties属性文件。下面以properties属性文件为例介绍。

配置Logger

log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
log4j.additivity.org.apache=false (不重复)

level :设定日志记录的最低级别,可设的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别,Log4j建议只使用中间四个级别
appenderName:就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。

例如:

log4j.rootLogger=INFO,A1,B2,C3

配置Appender

log4j.appender.appenderName = className

appenderName: Appender的名字,自定义,在log4j.rootLogger设置中使用;
常用的Appender的className如下:

org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender
Threshold=WARN:指定日志信息的最输出级别  
ImmediateFlush=true:表示所有消息都会被立即输出
Target=System.err:默认值是System.out。

FileAppender选项

Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中

DailyRollingFileAppender选项

Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
File=D:/logs/logging.log4j:指定当前消息输出到logging.log4j文件中。
DatePattern=’.’yyyy-MM:每月产生一个新的日志文件。

另外,也可以指定按周、天、时、分等来滚动日志文件,对应的格式如下:
‘.’yyyy-MM:每月
‘.’yyyy-ww:每周
‘.’yyyy-MM-dd:每天
‘.’yyyy-MM-dd-a:每天两次
‘.’yyyy-MM-dd-HH:每小时
‘.’yyyy-MM-dd-HH-mm:每分钟

RollingFileAppender选项

Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。
MaxFileSize=100KB:后缀可以是KB, MB 或者GB**。。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数
配置Layout

log4j.appender.appenderName.layout=className

常见的className如下:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

HTMLLayout选项

LocationInfo=true:输出java文件名称和行号,默认值是false。
Title=My Logging: 默认值是Log4J Log Messages。
PatternLayout选项
ConversionPattern=%m%n:设定以怎样的格式显示消息。
各种格式化说明如下:

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

一段简单的log4j配置备用:

### set log levels ###
log4j.rootLogger = debug,stdout,D,E

### 输出到控制台 ###
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{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
log4j.appender.D.DatePattern = '.'yyyy-MM-dd

### 保存异常信息到单独文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.DatePattern = '.'yyyy-MM-dd-HH-mm
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
标签: Java LOG4J
共有 人打赏支持
粉丝 74
博文 97
码字总数 40640
评论 (2)
Joash
可以再加一个mail配置,把error通知给你,还有日志信心可以再加上thread,这样请求多的时候可以跟踪某个请求的路径:smirk:
冷冷gg

引用来自“SprinG"”的评论

可以再加一个mail配置,把error通知给你,还有日志信心可以再加上thread,这样请求多的时候可以跟踪某个请求的路径:smirk:
嗯 有空再深入研究
×
冷冷gg
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: