参考样例
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="INFO" monitorInterval="30">
<!--先定义所有的appender-->
<appenders>
<!--这个输出控制台的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
<File name="MyFile" fileName="${sys:user.home}/logs/app.log" append="true">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} [%t] - [%p] - %m%n"/>
</File>
<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size, 则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/provider-app-client/info.log"
filePattern="${sys:user.home}/logs/provider-app-client/info-%d{yyyy-MM-dd}-%i.log">
<Filters>
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} [%t] - [%p] - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/provider-app-client/warn.log"
filePattern="${sys:user.home}/logs/provider-app-client/warn-%d{yyyy-MM-dd}-%i.log">
<Filters>
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} [%t] - [%p] - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/provider-app-client/error.log"
filePattern="${sys:user.home}/logs/provider-app-client/error-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="ERROR"/>
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} [%t] - [%p] - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</appenders>
<Loggers>
<logger name="org.springframework" level="ERROR"></logger>
<root level="info">
<appender-ref ref="Console"/>
<appender-ref ref="MyFile"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileWarn"/>
<appender-ref ref="RollingFileError"/>
</root>
</Loggers>
</configuration>
节点配置说明
-
根节点Configuration有两个属性:status和monitorinterval,有两个子节点:Appenders和Loggers(表明可以定义多个Appender和Logger)
status:用来指定log4j本身的打印日志的级别. monitorinterval:用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s.(如果更改配置文件,不用重启系统).
-
Appenders节点,常见的有三种子节点:Console、RollingFile、File.
-
Console节点用来定义输出到控制台的Appender.
name:指定Appender的名字. target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT. PatternLayout:输出格式,不设置默认为:%m%n.
-
File节点用来定义输出到指定位置的文件的Appender.
name:指定Appender的名字. fileName:指定输出日志的目的文件带全路径的文件名. PatternLayout:输出格式,不设置默认为:%m%n.
-
RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender.
name:指定Appender的名字. fileName:指定输出日志的目的文件带全路径的文件名. PatternLayout:输出格式,不设置默认为:%m%n. filePattern:指定新建日志文件的名称格式. Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志. TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。 modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am. SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小. DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性).
-
-
Loggers节点,常见的有两种:Root和Logger.
-
Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出.
level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn <Error < Fatal < OFF. AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender. Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。 level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn <Error < Fatal < OFF. name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点. AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定, 就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会 输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出.
-
-
关于日志level.共有8个级别,按照从低到高为:All< Trace < Debug < Info < Warn < Error <
Fatal < OFF.All:最低等级的,用于打开所有日志记录. Trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多, 不过没关系,我们可以设置最低日志级别不让他输出. Debug:指出细粒度信息事件对调试应用程序是非常有帮助的. Info:消息在粗粒度级别上突出强调应用程序的运行过程. Warn:输出警告及warn以下级别的日志. Error:输出错误信息日志. Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志. OFF:最高等级的,用于关闭所有日志记录.
-
日志格式配置
%m 输出代码中指定的消息 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费的毫秒数 %c 输出所属的类目,通常就是所在类的全名 %t 输出产生该日志事件的线程名 %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式 如:%d{dd MMM yyyy HH:mm:ss,SSS}, 输出类似:02 Nov 2012 14:34:02,781 %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数 如:Testlog.main(TestLog.java:10) %F 输出日志消息产生时所在的文件名称 %L 输出代码中的行号 %x 输出和当前线程相关联的NDC(嵌套诊断环境),像java servlets多客户多线程的应用中 %% 输出一个"%"字符
详细配置例子项目:springBoot+log4j2+maven