结合网络资料,官方文档,给出的一份log4j2的xml配置。
很多配置项的官方文档地址有列出。注释中有些自己的理解,感觉不到位的地方请参靠官方文档。
还有很多没有用到的功能,希望以后有机会再好好研究吧
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--status="WARN" :用于设置log4j2自身内部日志的信息输出级别,默认是OFF-->
<!--monitorInterval="30" : http://logging.apache.org/log4j/2.x/manual/configuration.html#AutomaticReconfiguration 间隔秒数,自动检测配置文件的变更和重新配置本身 -->
<configuration status="debug" monitorInterval="30">
<!--
Properties:https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution
自定义一些常量,之后使用${变量名}引用-->
<Properties>
<!--项目的名称-->
<Property name="projectName">currency_backstage</Property>
<!--日志文件地址-->
<Property name="logFilePath">logs</Property>
<!--日志文件名称-->
<Property name="logFileName">currency_backstage.log</Property>
<!--错误日志文件地址-->
<Property name="logErrorFilePath">logs/error</Property>
<!--错误日志文件名称-->
<Property name="logErrorFileName">currency_error_backstage.log</Property>
<!--滚动文件地址-->
<Property name="logRollingFilePath">logs/</Property>
<!--滚动日志文件名称-->
<Property name="logRollingFileName">currency_backstage.log</Property>
</Properties>
<!--
appenders: https://logging.apache.org/log4j/2.x/manual/appenders.html#
追加器 appenders于logger的关系,Log4j允许记录请求打印到多个目标。对log4j来说,输出目标称为Appender。
一个Logger可以附加多个appender。
-->
<appenders>
<!--console :https://logging.apache.org/log4j/2.x/manual/appenders.html#ConsoleAppender
控制台输出的配置 SYSTEM_OUT标准输出(System.out) SYSTEM_ERR 标准错误输出(System.err)-->
<console name="Console" target="SYSTEM_OUT">
<!--PatternLayout :输出日志的格式 -->
<PatternLayout
pattern="%highlight{%d [%t] %-5level [line-%L] [%C]: %msg%n%throwable}{FATAL=white, ERROR=red, WARN=yellow, INFO=black, DEBUG=green, TRACE=blue}"/>
</console>
<!--File :https://logging.apache.org/log4j/2.x/manual/appenders.html#FileAppender
同步输出日志到本地文件Log
name这个追加器的唯一表示
fileName文件名
append 是否追加输出,false的话每次启动项目都会先清空再输出-->
<File name="LocalAllLog" fileName="${logFilePath}/${logFileName}" append="true">
<!--PatternLayout : https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout
输出日志的格式
%style 样式
%L 行号
%highlight 高亮
%d 日期
%t 线程名
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%C 类
%msg 消息
%n 换行
%throwable 抛出的异常信息
-->
<PatternLayout
pattern="[%style{%L}{Bright,blue}] %highlight{%d [%t] %-5level [%C]: %msg%n%throwable}{FATAL=white, ERROR=red, WARN=yellow, INFO=black, DEBUG=green, TRACE=blue}"/>
</File>
<!--同上-->
<File name="LocalErrorLog" fileName="${logErrorFilePath}/${logErrorFileName}" append="true">
<!--同上-->
<PatternLayout
pattern="%highlight{%d [%t] %-5level [line-%L] [%C]: %msg%n%throwable}{FATAL=white, ERROR=red, WARN=yellow, INFO=black, DEBUG=green, TRACE=blue}"/>
<!-- ThresholdFilter :https://logging.apache.org/log4j/2.x/manual/filters.html#ThresholdFilter
阈值过滤,这个追加器主要目的,是输出错误的内容到一个单独日志,所以限制了只有Error才输出
level 过滤器的级别
onMatch 如果匹配的时候 ACCEPT接受
onMismatch 不匹配的时候 DENY 拒绝。
也可以灵活使用 onMatch的时候 DENY拒绝 不匹配的时候接受。看自己需求
-->
<ThresholdFilter level="Error" onMatch="ACCEPT" onMismatch="DENY"/>
</File>
<!--RollingFile: https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender
有时日志很多,所有内容都放在一个log文件里面不现实,为了归档,便于管理查看,此时可使用RollingFile.
name:
fileName: 日志名称,
filePattern: 日志进行归档后,根据该范例命名,例:currency_backstage-2020-03-11-1.log。
(
%d{yyyy-MM}:日期与格式化。
%i计数器,从1开始。每归档一个文件则会加1.
我自己的测试的结果,归档文件数量到达上限后(DefaultRolloverStrategy的max参数配置,下面有),
计数器应该是维持最大值不变,会删除最早的文件,然后重新命名所有文件 。
例子,1.log 2.log 3.log,此时新增一个文件,会删除1.log 然后把2.log改为1.log、3.log改为2.log
最新的文件命名为3.log。
)
-->
<RollingFile name="RollingFileInfo" fileName="${logRollingFilePath}/${logRollingFileName}"
filePattern="${logRollingFilePath}/rolling/%d{yyyy-MM}/${projectName}-%d{yyyy-MM-dd}-%i.log">
<!-- PatternLayout 日志输出格式 同上-->
<PatternLayout
pattern="%highlight{%d [%t] %-5level [line-%L] [%C]: %msg%n%throwable}{FATAL=white, ERROR=red, WARN=yellow, INFO=black, DEBUG=green, TRACE=blue}"/>
<!-- Policies :日志滚动策略-->
<Policies>
<!-- TimeBasedTriggeringPolicy :时间滚动策略,默认0点小时产生新的文件,interval="6" : 自定义文件滚动时间间隔,每隔6小时产生新文件, modulate="true" : 产生文件是否以0点偏移时间,即6点,12点,18点,0点-->
<!-- <TimeBasedTriggeringPolicy interval="6" modulate="true"/>-->
<!-- SizeBasedTriggeringPolicy :文件大小滚动策略 超过100MB,则重命名原来的日志文件,归档。并生成新的日志文件用于log写入-->
<SizeBasedTriggeringPolicy size="100MB"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里可以任意设置 -->
<DefaultRolloverStrategy max="3"/>
</RollingFile>
<!--SMTP :邮件发送日志 https://logging.apache.org/log4j/2.x/manual/appenders.html#SMTPAppender-->
<!-- <SMTP name="Mail" subject="货币后台异常信息" to="message@message.info" from="message@lengjing.info" smtpUsername="message@message.info" smtpPassword="****" smtpHost="mail.*****.info" smtpDebug="false" smtpPort="25" bufferSize="10">-->
<!-- <PatternLayout pattern="[%-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" />-->
<!-- </SMTP>-->
</appenders>
<!-- https://logging.apache.org/log4j/2.x/manual/configuration.html#Loggers 只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<!--Logger节点用来单独指定日志的形式,name为包路径,比如要为org.springframework包下所有日志指定为INFO级别等。 -->
<logger name="org.springframework" level="INFO"/>
<logger name="org.mybatis" level="INFO"/>
<!-- 每个配置必须要有root-logger(root标签,如果未配置,将使用默认根LoggerConfig),Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 -->
<!-- ROOT-logger 于其他logger的区别是 1.root-logger没有名称属性。2.root-logger没有父项,因此不支持加性属性。-->
<root level="INFO">
<Appender-ref ref="Console"/>
<!--<Appender-ref ref="LocalAllLog"/> 因为Rolling就可以满足我看日志的需求,就不再输出另一个本地文件了,以免重复-->
<Appender-ref ref="LocalErrorLog"/>
<Appender-ref ref="RollingFileInfo"/>
</root>
<!--AsyncLogger:https://logging.apache.org/log4j/2.x/manual/async.html 异步日志,LOG4J有三种日志模式,全异步日志,混合模式,同步日志,性能从高到底,线程越多效率越高,也可以避免日志卡死线程情况发生-->
<!--additivity="false" : additivity设置事件是否在root logger输出,为了避免重复输出,可以在Logger 标签下设置additivity为”false”-->
<!-- <AsyncLogger name="AsyncLogger" level="WARN" includeLocation="true" additivity="false">-->
<!-- <appender-ref ref="RollingFileError"/>-->
<!-- </AsyncLogger>-->
</loggers>
</configuration>