java实战4:利用log4j实现不同类日志输出到不同的文件
1:apache log4j介绍
Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。
1、Loggers
Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,明白这一点很重要,Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。
2、Appenders
禁用和使用日志请求只是Log4j的基本功能,Log4j日志系统还提供许多强大的功能,比如允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。
常使用的类如下:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
配置模式:
appenderName 为自定义的名字,和类名一样起标识作用
log4j.appender.appenderName = className
log4j.appender.appenderName.Option1 = value1
…
log4j.appender.appenderName.OptionN = valueN
3、Layouts输出格式
有时用户希望根据自己的喜好格式化自己的日志输出,Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。
常使用的类如下:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
2:配置log4j
Log4j支持两种配置文件格式,一种是XML(标准通用标记语言下的一个应用)格式的文件,一种是Java特性文件log4j.properties(键=值)。下面将介绍使用log4j.properties文件作为配置文件的方法
2.1:配置根Logger:
log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
log4j.additivity.org.apache=false 表示Logger不会在父Logger的appender里输出,默认为true。
log4j.additivity.appenderName1=false
level :设定日志记录的最低级别,值有:ERROR、WARN、INFO、DEBUG
appenderName:就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。
例如:log4j.rootLogger=INFO,A1,B2,C3
2.2:配置append
log4j.appender.appenderName = className
配置日志输出到哪里去
- className:可设值如下:
(1)org.apache.log4j.ConsoleAppender(控制台)
(2)org.apache.log4j.FileAppender(文件)
(3)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
(4)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
(5)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
其他可选参数包括日志级别等
3 利用log4j实现不同类日志输出到不同的文件
log4j.rootLogger = INFO,console,other
### 输出到控制台 ###
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %-60c %x - %m%n
#jsonSchema log out config
log4j.logger.jsonSchema=INFO,jsonSchema
log4j.appender.jsonSchema = org.apache.log4j.DailyRollingFileAppender
log4j.appender.jsonSchema.File = /logs/jsonSchema.log
//对于生产上部署应该是自己的部署位置目录:/opt/bigdata/log.log
log4j.appender.jsonSchema.Append = true
log4j.appender.jsonSchema.layout = org.apache.log4j.PatternLayout
log4j.appender.jsonSchema.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.additivity.jsonSchema=false
#other and default log out config
log4j.logger.other=INFO,other
log4j.appender.other = org.apache.log4j.DailyRollingFileAppender
log4j.appender.other.File = logs/log.log
log4j.appender.other.Append = true
log4j.appender.other.layout = org.apache.log4j.PatternLayout
log4j.appender.other.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.additivity.other=false
测试
private final static Log LOGGER = LogFactory.getLog("other");
//获取append的定义,追加到定义的文件中
private final static Log LOGGER_JSON = LogFactory.getLog("jsonSchema");
private final static Log LOGGER_DEFAULT = LogFactory.getLog(LogOutTest.class);
@Test
public void testJsonLog() {
Assert.assertTrue(1 == 1);
LOGGER.info("This is other log test"); //输出到log.log中
LOGGER_JSON.info("This is jsonSchema log test ."); //输出到jsonSchema.log中
LOGGER_DEFAULT.info("This is default log test ."); //默认的输出到log.log中
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)