日志记录会消耗性能,但当出现问题的时候,日志又能够帮助我们快速解决问题。那么如何提高打日志的性能呢?在使用logback的时候,推荐使用AsyncAppender异步记录日志。
1)logback设置AsyncAppender
要注意AsyncAppender异步记录ILoggingEvents,它仅充当事件分派器,因此必须引用另一个appender才能执行任何有用的操作。
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myapp.log</file>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] [%logger{50}] >>> %msg%n</pattern>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE" />
</appender>
<root level="DEBUG">
<appender-ref ref="ASYNC" />
</root>
</configuration>
2)参数配置
参数名称 | 参数类型 | 建议值 | 说明 |
queueSize | int | queueSize计算 example:假设IO影响30s,日志和qps比例是1:1,单容器压测值1500 qps则可以推算出queue size的值,queueSize的设置公式:30 *1500=45000。 | 阻塞队列的最大容量。默认情况下,queueSize设置为256。 |
discardingThreshold | int | 使用默认值20,或者设置大于0。 如果设置discardingThreshold=0,表示queue 满了,不丢弃,block线程。 | 默认情况下,当阻塞队列剩余20%的容量时,它将丢弃级别跟踪、调试和信息事件,只保留级别警告和错误事件。要保留所有事件,请将discardingThreshold设置为0。 |
neverBlock | boolean | true | 如果为false(默认值),则追加程序将阻止追加到完整队列,而不是丢失消息。设置为true时,附加程序只会丢弃消息,不会阻止您的应用程序。 |
参考链接:http://logback.qos.ch/manual/appenders.html#AsyncAppender