高并发处理的日志优化
有以下几个方面:
- 使用 Log4j2 的异步日志
- 合理设置日志级别
- 合理分割日志文件
- 容器环境下的日志使用ES(不建议使用NFS等网络文件夹)
1、Log4j2 的异步日志
Log4j2 的同步、异步性能比较:
Log4j2 与其它日志比较:
查看地址
Log4j2的结构:
Log4j2日志输出流程:
配置方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <Configuration status="WARN"> <Appenders> ... </Appenders> <Loggers> <AsyncRoot level="info" includeLocation="false"> <AppenderRef ref="yourAppenderName"/> </AsyncRoot> <AsyncLogger name="com.example.MyClass" level="debug"> <AppenderRef ref="yourAppenderName"/> </AsyncLogger> </Loggers> </Configuration>
|
注意:
- 异步日志可能会造成数据丢失,比如服务器宕机、容器宕机。
- 异步日志的顺序无法保证。可以配置异步线程池为 1
2、合理设置日志级别
避免日志滥用的最好方式是使用 DEBUG ,既有利于日志定位问题的速度,又能提高性能。
3、合理分割日志文件
一个示例:
1 2 3 4 5 6 7 8 9 10 11
| <RollingFile name="ROLLING_FILE"> <PatternLayout pattern="${pattern}"/> <Policies> <!-- <OnStartupTriggeringPolicy />--> <!--单个文件 超过2GB就分--> <SizeBasedTriggeringPolicy size="2 GB"/> <!-- <TimeBasedTriggeringPolicy />--> </Policies> <!--超过10个会自动删除--> <DefaultRolloverStrategy max="10"/> </RollingFile>
|
4、容器环境下的日志使用ES
Docker 环境
可直接使用宿主机
K8S 环境
使用临时路径并开启缓存,通过 Filebeat Sidecar 采集日志数据到 ES,通过Kibana查看日志。
本文地址: https://github.com/maxzhao-it/blog/post/2639945454/