首页 > 编程知识 正文

log4j配置(log4j配置详解)

时间:2023-05-05 05:21:34 阅读:81270 作者:3563

一、背景

最近,由于项目需要,我们将log4j 1.x的所有版本都迁移到了log4j 2.x的版本上。 有关随之而来的slf4j集成log4j的配置(使用slf4j集成Log4j2构建项目日志系统的完美解决方案)和Log4j2配置文件的详细信息,我们需要仔细讨论。 本文介绍了log4j2.xml配置文件中每个标签的含义。

二、安排全解

1 .关于概要文件的名称和项目内的保管场所

log4j 2.x版本不再支持文件放置,如1.x的. properties后缀。 2.x版本配置文件只有“. xml”,“. json”,“. jsn”扩展名。

系统选择的配置文件的优先级按先到先得的顺序如下:

(1).classpath下的名为log4j2-test.json或log4j2-test.jsn的文件。

)2).classpath下的名为log4j2-test.xml的文件。

(3).classpath下的名为log4j2.json或log4j2.jsn的文件。

(4).classpath下的名为log4j2.xml的文件。

通常,缺省情况下使用log4j2.xml进行命名。 在本地测试时,可以将log4j2-test.xml放入classpath中,但在正式环境中使用log4j2.xml时,请勿在软件包部署时打包log4j2-test.xml

2 .默认配置文件

? XML版本=' 1.0 '编码=' utf-8 '?

配置状态=' warn '

阿彭德尔斯

控制台名称='控制台目标='系统_输出'

patternlayoutpattern=' % d { hh : mm : ss.SSS } [ % t ]-5级日志程序- %毫秒% n ' /

/控制台

/Appenders

日志程序

超级级别='错误'

供应商参考='控制台' /

/根

/Loggers

/配置

3 .解析性能分析节点

(1) .根节点Configuration有两个属性:status和monitorinterval,有两个子节点:Appenders和Loggers ()可以定义多个Appender和Logger

status用于指定log4j本身的打印日志级别。

监视器间隔用于指定log4j自动重新配置的监视间隔时间,单位为s,最小为5s。

)2).Appenders节点,常见的有三种子节点:控制台、滚动文件、文件。

控制台节点用于定义输出到控制台的Appender。

name:指定Appender的名称。

仅设置目标:系统输出或系统输出,通常是缺省的:系统_输出。

PatternLayout:输出格式。 未设置默认的:%m%n。

File节点定义要输出到指定位置的文件的Appender。

name:指定Appender的名称。

fileName:为输出日志的目标文件指定完整路径的文件名。

PatternLayout:输出格式。 未设置默认的:%m%n。

滚动文件节点用于定义自动删除超过指定大小的旧文件并创建新的Appender。

name:指定Appender的名称。

fileName:为输出日志的目标文件指定完整路径的文件名。

PatternLayout:输出格式。 未设置默认的:%m%n。

filePattern:指定新日志文件的名称格式。

在Policies:中,指定滚动日志的策略。 这是创建新的日志文件并输出日志的时机。

timebasedtriggeringpolicy :策略子节点、基于时间的滚动策略和interval属性用于指定滚动的频率,默认值为1 hour。 modulate=true用于调整时间。 比如现在是早上3am,interval是4,第一个滚动是4am,然后是8am,12am不是. 7am。

sizebasedtriggeringpolicy :策略子节点。 基于指定文件大小的滚动策略,使用size属性定义每个日志文件的大小。

DefaultRolloverStrategy:用于指定如果同一文件夹下有最多几个日志文件,则开始删除最旧的日志文件和最旧的日志文件

建新的(通过max属性)。

(3).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中进行输出。

(4).关于日志level.

共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

All:最低等级的,用于打开所有日志记录.

Trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出.

Debug:指出细粒度信息事件对调试应用程序是非常有帮助的.

Info:消息在粗粒度级别上突出强调应用程序的运行过程.

Warn:输出警告及warn以下级别的日志.

Error:输出错误信息日志.

Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志.

OFF:最高等级的,用于关闭所有日志记录.

程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。

4.比较完整的log4j2.xml配置模板

<?xml version="1.0" encoding="UTF-8"?> <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--> <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--> <configuration status="WARN" monitorInterval="30"> <!--先定义所有的appender--> <appenders> <!--这个输出控制台的配置--> <console name="Console" target="SYSTEM_OUT"> <!--输出日志的格式--> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> </console> <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--> <File name="log" fileName="log/test.log" append="false"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log" filePattern="${sys:user.home}/logs/${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> </RollingFile> <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log" filePattern="${sys:user.home}/logs/${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --> <DefaultRolloverStrategy max="20"/> </RollingFile> <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log" filePattern="${sys:user.home}/logs/${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> </RollingFile> </appenders> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--> <loggers> <!--过滤掉spring和mybatis的一些无用的DEBUG信息--> <logger name="org.springframework" level="INFO"></logger> <logger name="org.mybatis" level="INFO"></logger> <root level="all"> <appender-ref ref="Console"/> <appender-ref ref="RollingFileInfo"/> <appender-ref ref="RollingFileWarn"/> <appender-ref ref="RollingFileError"/> </root> </loggers> </configuration>

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。