【系统日志】log4j配置学习总结
发布日期:2021-05-06 22:21:43 浏览次数:11 分类:技术文章

本文共 5307 字,大约阅读时间需要 17 分钟。

点击上方蓝色字体,关注我们

来源:https://my.oschina.net/giegie

作者:冷冷gg

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 = classNamelog4j.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 =classNamelog4j.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.WriterAppenderThreshold=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-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.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern =  %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n### 输出到日志文件 ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = logs/log.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = INFOlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%nlog4j.appender.D.DatePattern = '.'yyyy-MM-dd### 保存异常信息到单独文件 ###log4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File = logs/error.loglog4j.appender.E.Append = truelog4j.appender.E.Threshold = ERRORlog4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.DatePattern = '.'yyyy-MM-dd-HH-mmlog4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

推荐作品

  ●  springboot+dubbo+redis+rabbitMQ整合实例

  ●  卸磨杀驴,程序员心中的悲愤和无奈

  ●  

  ●  记一次内存溢的出分析经历——带给我的痛苦

  ●  10步代码详解springboot集成数据库

  ●  

  ●  

  ●  记录服务上线一年来的点点滴滴

  ●  传播正能量——做一个快乐的程序员  

  ●  初探性能调优——2个月到4小时的性能提升

上一篇:经历≠经验,码农如何工作10年依然是菜鸟?
下一篇:刚出炉一线城市程序员工资大调查,你达到平均线了吗?

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月02日 14时45分25秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

for循环读取数组遇问题:dexError: invalid index to scalar variable. 2019-03-03
编写测试用例的实用小技巧 2019-03-03
c语言贪吃蛇控制台版 2019-03-03
Windows10 下springboot应用无法被外部网络访问 2019-03-03
报错:在IDEA中springboot项目操作数据库,配置文件驱动com.mysql.cj.jdbc.Driver标红 2019-03-03
redis报错(error) NOAUTH Authentication required.解决办法 2019-03-03
【树形dp】P1273 有线电视网 2019-03-03
【分层图最短路】P4568 [JLOI2011]飞行路线 2019-03-03
【最短路】P4408 [NOI2003]逃学的小孩 2019-03-03
2020C证(安全员)模拟考试题及C证(安全员)模拟考试系统 2019-03-03
2020电工(初级)考试及电工(初级)考试软件 2019-03-03
2020N1叉车司机模拟考试题库及N1叉车司机复审模拟考试 2019-03-03
2020年G3锅炉水处理报名考试及G3锅炉水处理考试申请表 2019-03-03
2020年制冷与空调设备运行操作答案解析及制冷与空调设备运行操作考试总结 2019-03-03
2020年保育员(初级)考试资料及保育员(初级)新版试题 2019-03-03
2020年茶艺师(高级)考试内容及茶艺师(高级)考试申请表 2019-03-03
2021年过氧化工艺试题及答案及过氧化工艺考试平台 2019-03-03
2021年重氮化工艺考试题库及重氮化工艺考试报名 2019-03-03
2021年车工(高级)考试总结及车工(高级)试题及答案 2019-03-03
2021年压力焊证考试及压力焊实操考试视频 2019-03-03