集成log4j2【JWordPress前台项目实战】
写在前面
在任何系统中,日志都是非常重要的组成部分,它是反映系统运行情况的重要依据,也是排查问题时的必要线索。绝大多数人都认可日志的重要性,但是又有多少人仔细想过该怎么打日志,日志对性能的影响究竟有多大呢?
新的Log4j 2.0版本有了大幅的性能提升、新的插件系统,以及配置设置方面的很多改善。Log4j 1.x 在高并发情况下出现死锁导致cpu使用率异常飙升,而Log4j2.0基于LMAX Disruptor的异步日志在多线程环境下性能会远远优于Log4j 1.x和logback ——
官方测试结果。
代码
pom.xml添加相应的依赖
<!--配置Log4j2日志 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.6</version>
</dependency>
增加日志格式配置文件log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出。 -->
<!-- monitorInterval 自动监控配置文件是否发生改变的时间间隔,如果检测到改变会进行热加载-->
<Configuration status="INFO" monitorInterval="1800">
<!-- 全局属性 -->
<properties>
<!--日志文件储存的目录 -->
<!-- <property name="LOG_HOME">${sys:catalina.home}/logs/om_error</property> -->
<property name="LOG_HOME">/data/logs</property>
<property name="ERROR_FILE_NAME">JWordpres-web</property>
<!--设定日志输出的具体格式 -->
<!--%-5p(日志级别) | %d(日期) | JWordpres-v1.0 | [%t(线程名称)-%T(线程号)] (%c{1.}(简化全类名):%L(行号)) | %m(日志信息)%n(换行) -->
<property name="PATTERN">%-5p | %d | JWordpres-v2.0 | [%t-%T] (%c{1.}:%L) | %m%n</property>
<!-- <property name="PATTERN">%d %-5p [%t-%T] (%c{1.}:%L) - %m%n</property> -->
</properties>
<!--定义日志的输出路径 -->
<Appenders>
<!--输出日志到控制台 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${PATTERN}" />
</Console>
<!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="ErrorLog" fileName="${LOG_HOME}/${ERROR_FILE_NAME}.log"
filePattern="${LOG_HOME}/${ERROR_FILE_NAME}_%d{yyyy-MM-dd}_%i.log"
bufferedIO="false" immediateFlush="true" >
<!--设置日志输出的格式 -->
<PatternLayout pattern="${PATTERN}"/>
<!--设置当前日志只输出ERROR级别的日志 -->
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<!-- <Filters>
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters> -->
<Policies>
<SizeBasedTriggeringPolicy size="50 MB" />
<!--设置触发时间策略的时间间隔,一天产生一个新文件 -->
<TimeBasedTriggeringPolicy interval="2000" modulate="true"/>
<!--设置每个日志文件的最大大小,单位可以为 B KB MB GB -->
<!-- <SizeBasedTriggeringPolicy size="1KB"/> -->
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20000 -->
<DefaultRolloverStrategy max="20000"/>
</RollingFile>
</Appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<Loggers>
<!-- 3rdparty Loggers -->
<!-- 下面配置一些第三方包的日志过滤级别,用于避免刷屏 测试-->
<logger name="org.hibernate" level="INFO" />
<logger name="org.springframework" level="INFO" />
<logger name="org.apache" level="INFO" />
<logger name="org.mybatis" level="INFO" />
<logger name="com.alibaba" level="INFO" />
<logger name="druid.sql" level="INFO" />
<logger name="cn.liuhaihua.web.mapper" level="DEBUG" />
<logger name="cn.liuhaihua.web.service.impl" level="INFO" />
<!--com.gomefinance包下的日志异步输出 includeLocation:包含本地信息;additivity:不继承父类的日志输出-->
<AsyncLogger name="cn.liuhaihua.web" level="INFO" includeLocation="true" additivity="false">
<appender-ref ref="ErrorLog"/>
<appender-ref ref="Console"/>
</AsyncLogger>
<!--建立一个默认的root的logger -->
<root level="INFO" includeLocation="true">
<appender-ref ref="ErrorLog"/>
<appender-ref ref="Console"/>
</root>
</Loggers>
</Configuration>
效果
启动应用,查看日志格式如下图所示
实战项目介绍
项目介绍:
为了满足Java新手朋友课程要求,我特出此教程,由于时间仓促的问题,代码写得不好之处的地方还请多多包涵。
目标如下
- 优化wordpress效率低下的问题(目前博主文章数量大概10万+)
- 让群里面初级Java朋友们更快上手springboot应用
GIT地址:https://gitee.com/jxuasea/JWordpress
正文到此结束