原创

集成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>

效果

启动应用,查看日志格式如下图所示 1530787786(1)

实战项目介绍

项目介绍: 为了满足Java新手朋友课程要求,我特出此教程,由于时间仓促的问题,代码写得不好之处的地方还请多多包涵。 目标如下
  1. 优化wordpress效率低下的问题(目前博主文章数量大概10万+)
  2. 让群里面初级Java朋友们更快上手springboot应用
GIT地址:https://gitee.com/jxuasea/JWordpress
正文到此结束
Loading...