博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pom.xml增加依赖
阅读量:5280 次
发布时间:2019-06-14

本文共 5449 字,大约阅读时间需要 18 分钟。

log4j大家应该再熟悉不过了,log4j2则是log4j的一次比较大的升级,底层使用disruptor重写优化了异步输出日志,性能得到极大提高。笔者曾将log4j、logback、log4j2做过性能对比,log4j2的确表现出绝对的优势。话不多说,下面主要是贴出笔者在项目中不断完善的log4j2配置文件。

pom.xml增加依赖

<!-- 日志log4j2 -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>${com-lmax-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off">
<Properties>
<Property name="LOG_HOME">logs</Property>
</Properties>
<!--先定义所有的appender -->
<Appenders>

<!-- 优先级从高到低分别是 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL -->

<!-- 单词解释: Match:匹配 DENY:拒绝 Mismatch:不匹配 ACCEPT:接受 -->
<!-- DENY,日志将立即被抛弃不再经过其他过滤器; NEUTRAL,有序列表里的下个过滤器过接着处理日志; ACCEPT,日志会被立即处理,不再经过剩余过滤器。 -->
<!--输出日志的格式
%d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间
%p : 日志输出格式
%c : logger的名称
%m : 日志内容,即 logger.info("message")
%n : 换行符
%C : Java类名
%L : 日志输出所在行数
%M : 日志输出所在方法名
hostName : 本地机器名
hostAddress : 本地ip地址 -->

<!-- 控制台 -->

<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%c:%L]-%m%n"/>
</Console>
<!-- lucas_device.log文件 -->
<RollingFile name="service_appender" fileName="${LOG_HOME}/lucas_device.log"
immediateFlush="false" append="true"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/lucas_device-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%c:%L]-%m%n"/>
<Filters>
<!--如果是error级别拒绝 onMismatch="NEUTRAL",有序列表里的下个过滤器过接着处理日志; -->
<ThresholdFilter level="error" onMatch="DENY"
onMismatch="NEUTRAL"/>
<!--如果是info\warn输出 onMismatch="DENY",日志将立即被抛弃不再经过其他过滤器 -->
<ThresholdFilter level="info" onMatch="ACCEPT"
onMismatch="DENY"/>
</Filters>
<Policies>
<!-- 如果启用此配置,则日志会按文件名生成新压缩文件, 即如果filePattern配置的日期格式为 %d{yyyy-MM-dd HH}
,则每小时生成一个压缩文件, 如果filePattern配置的日期格式为 %d{yyyy-MM-dd} ,则天生成一个压缩文件 -->
<TimeBasedTriggeringPolicy/>
<!-- 每个日志文件最大512MB -->
<SizeBasedTriggeringPolicy
size="512MB"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${LOG_HOME}" maxDepth="2">
<IfFileName glob="*/lucas_device-*.log.gz"/>
<!-- 删除30天前的文件 -->
<IfLastModified age="30d"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<!-- lucas_device_error.log文件 -->
<RollingFile name="service_appender_error" fileName="${LOG_HOME}/lucas_device_error.log"
immediateFlush="false" append="true"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/lucas_device_error-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%c:%L]-%m%n"/>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT"
onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy
size="512MB"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${LOG_HOME}" maxDepth="2">
<IfFileName glob="*/lucas_device_error-*.log.gz"/>
<IfLastModified age="30d"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<!-- lucas_device_mqtt.log文件 -->
<RollingFile name="service_appender_mqtt" fileName="${LOG_HOME}/lucas_device_mqtt.log"
immediateFlush="false" append="true"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/lucas_device_mqtt-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%c:%L]-%m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy
size="512MB"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${LOG_HOME}" maxDepth="2">
<IfFileName glob="*/lucas_device_mqtt-*.log.gz"/>
<IfLastModified age="7d"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<!-- lucas_device_restful.log文件 -->
<RollingFile name="service_restful" fileName="${LOG_HOME}/lucas_device_restful.log"
immediateFlush="false" append="true"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/lucas_device_restful-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%c:%L]-%m%n"www.oushengyule.com/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy
size="512MB"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${LOG_HOME}" maxDepth="2">
<IfFileName glob="*/lucas_device_restful-*.log.gz"/>
<IfLastModified age="7d"www.meiwanyule.cn />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>

<Loggers>

<AsyncRoot level="info" includeLocation="true"
additivity="false">
<AppenderRef ref="Console"www.yongshi123.cn/>
<AppenderRef ref="service_appender"/>
<AppenderRef ref="service_appender_error"/>
</AsyncRoot>
<AsyncLogger name="com.lucas.device.mqtt.message.MqttMessagePublishSolver" level="info" includeLocation="true"
additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="service_appender_mqtt"www.chengmingdL.com />
</AsyncLogger>
<AsyncLogger name="com.lucas.device.aop.MainLogAspect" level="info" includeLocation="true"
additivity="false">
<AppenderRef ref="Console"www.chengmyuLegw.cn/>
<AppenderRef ref="service_restful"/>
</AsyncLogger>
<AsyncLogger name="com.lucas.device.mapper" level="debug"
includeLocation="true" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="service_restful"www.yuntianyuL.cn/>
</AsyncLogger>
</Loggers>
</Configuration>
配置文件主要是异步将系统日志输出到不同文件。
lucas_device_error.log文件记录了系统异常日志;
lucas_device_restful.log记录的是用一个自定义注解@Logc记录的所有restful请求的日志,以及sql执行语句;
lucas_device_mqtt.log记录的是MqttMessagePublishSolver类输出的日志;
最后其他日志都会输出到lucas_device.log文件。
可以看到,在Loggers内部,我们指定了日志输出的目标文件,而所有日志我们都设置在Console控制台打印出来。
自定义日志注解@Logc详细介绍

转载于:https://www.cnblogs.com/qwangxiao/p/10943928.html

你可能感兴趣的文章
mysql启动过程
查看>>
2017前端面试题总结
查看>>
Http GetPost网络请求
查看>>
SWIFT国际资金清算系统
查看>>
Sping注解:注解和含义
查看>>
站立会议第四天
查看>>
如何快速掌握一门技术
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
vagrant 同时设置多个同步目录
查看>>
python接口自动化28-requests-html爬虫框架
查看>>
生成随机数的模板
查看>>
Mysql 数据库操作
查看>>
转:linux终端常用快捷键
查看>>
UVa 11059 最大乘积
查看>>
数组分割问题求两个子数组的和差值的小
查看>>
composer 报 zlib_decode(): data error
查看>>
hdu 3938 并查集
查看>>
《深入分析Java Web技术内幕》读书笔记之JVM内存管理
查看>>
python之GIL release (I/O open(file) socket time.sleep)
查看>>
软件开发与模型
查看>>