利用log4j实现不同类日志输出到不同的文件

wuchangjian2021-11-16 08:48:25编程学习

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
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中
    }

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。