Log4j2学习
背景
随着业务服务(Server App)逐渐增加,我们的业务系统中的日志输出面临的问题越来越多,高并发下对磁盘io这块消耗的越来越大,因此,急需要一个高性能且最好能够支持异步输出日志的日志框架,而且能兼容市面上目前主流的日志组件(log4j1.x,logback等)
简介
log4j2也是一款日志组件,log4j1.x升级版本,并且log4j2和log4j是同一个作者,但是log4j2是重新架构的。在我的理解中,尽管log4j2相较于log4j有很多优点,但是我采用它放弃log4j最大的理由是:它支持异步输出,性能秒杀一切的日志组件。
XML配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!--
日志级别优先级排序:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL
ALL 最低等级的,用于打开所有日志记录;
TRACE 很低的日志级别,一般不会使用;
DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息;
INFO 消息在粗粒度级别上突出强调应用程序的运行过程;
WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示;
ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行;打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别;
FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了;
OFF 最高等级的,用于关闭所有日志记录;
级别越高,日志越少;
设置的级别和比设置的级别优先级高的log能打印出来;
-->
<!-- configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:log4j2可以自动检测修改配置文件和重新配置本身,设置间隔秒数-->
<configuration status="ERROR" monitorInterval="30">
<!--变量配置-->
<Properties>
<!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<!-- %logger{36} 表示 Logger 名字最长36个字符 -->
<property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<!-- 定义日志存储的路径 -->
<property name="FILE_PATH" value="更换为你的日志路径" />
<property name="FILE_NAME" value="更换为你的项目名" />
</Properties>
<!-- 先定义所有的appender -->
<appenders>
<!-- 输出控制台的配置 -->
<console name="Console" target="SYSTEM_OUT">
<!-- 输出日志的格式 -->
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
<!-- 日志大于50M时,自动备份存档,生成新的文件 -->
<RollingFile name="logfile" fileName="${FILE_PATH}/system.log" filePattern="${FILE_PATH}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<!--interval属性用来指定多久滚动一次,默认是1 hour-->
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="50MB"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</appenders>
<!-- 然后定义logger,只有定义了logger并引入appender,appender才会生效 -->
<loggers>
<!-- 过滤掉spring、apache和druid的一些无用的DEBUG信息
就是设置日志级别
-->
<logger name="org.springframework" level="ERROR"></logger>
<logger name="com.alibaba.druid" level="ERROR"></logger>
<logger name="org.apache" level="ERROR"></logger>
<root level="INFO">
<appender-ref ref="Console"/>
<appender-ref ref="logfile"/>
</root>
</loggers>
</configuration>
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果