如何写 Logback 配置文件 ?
Posted Java后端
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何写 Logback 配置文件 ?相关的知识,希望对你有一定的参考价值。
通过阅读本篇文章将了解到
-
日志输出到文件并根据LEVEL级别将日志分类保存到不同文件 -
通过异步输出日志减少磁盘IO提高性能 -
异步输出日志的原理
配置文件logback-spring.xml
<configuration>
<property resource="logback.properties"/>
<appender name="CONSOLE-LOG" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern>
</layout>
</appender>
<!--获取比info级别高(包括info级别)但除error级别的日志-->
<appender name="INFO-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>${LOG_INFO_HOME}//%d.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<appender name="ERROR-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<!--欢迎关注 Web项目聚集地 回复 Java 获取2019最新资源-->
<fileNamePattern>${LOG_ERROR_HOME}//%d.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<root level="info">
<appender-ref ref="CONSOLE-LOG" />
<appender-ref ref="INFO-LOG" />
<appender-ref ref="ERROR-LOG" />
</root>
</configuration>
部分标签说明
<root>
标签,必填标签,用来指定最基础的日志输出级别
-
<appender-ref>
标签,添加append
<append>
标签,通过使用该标签指定日志的收集策略
-
name
属性指定appender命名
-
class
属性指定输出策略,通常有两种,控制台输出和文件输出,文件输出就是将日志进行一个持久化。 ConsoleAppender将日志输出到控制台
<filter>
标签,通过使用该标签指定过滤策略
-
<level>
标签指定过滤的类型
<encoder>
标签,使用该标签下的
<rollingPolicy>
标签指定收集策略,比如基于时间进行收集
-
<fileNamePattern>
标签指定生成日志保存地址,通过这样配置已经实现了分类分天手机日志的目标了
logback 高级特性异步输出日志
<!-- 异步输出 -->
<appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>256</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="INFO-LOG"/>
</appender>
<appender name="ASYNC-ERROR" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<!--欢迎关注 Web项目聚集地 回复 Java 获取2019最新资源-->
<queueSize>256</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="ERROR-LOG"/>
</appender>
异步输出日志性能测试
-
CPU 六核 -
内存 8G
-
Apache Jmeter
-
线程数:100 -
Ramp-Up Loop(可以理解为启动线程所用时间) :0 -
可以理解为100个线程同时启用
-
线程数 100 -
Ramp-Up Loop:0
异步日志输出原理
protected void append(E eventObject) {
if(!this.isQueueBelowDiscardingThreshold() || !this.isDiscardable(eventObject)) {
this.preprocess(eventObject);
this.put(eventObject);
}
}
E e = parent.blockingQueue.take();
aai.appendLoopOnAppenders(e);
源码
https://github.com/TiantianUpup/springboot-log
喜欢文章,点个在看
以上是关于如何写 Logback 配置文件 ?的主要内容,如果未能解决你的问题,请参考以下文章