日志规范:
| 流程 | 要做的事情 |
|---|---|
| 日志规范 | 固定字段定义 日志格式 |
| 日志采集 | 落盘规则 滚动策略 采集方法 |
| 日志传输 | 消息队列 消费方式 Topic规范 保存时间 |
| 日志切分 | 采样 过滤 自定格式 |
| 日志检索 | 索引分割 分片设置 检索优化 权限设置 保存时间 |
| 日志流监控 | 采集异常 传输异常 检索异常 不合规范 监控报警 |
日志类型:
- ES的server log
- Java应用logback
- Java组件的logback
- Kafka的server log
- Linux的server log
- MySQL的server log
- NGINX的server log
- Redis的server log
- 旧日志规范
logback和log4j2
结论:统一使用logback。
关于二者的区别,这里不做评比,网上一堆的评比讲解。
让线上那么多在运行的项目因为这么一点点的性能差异,而且还是log4j2自己吹出来的,并不是实战的结果就做一个打印日志方式的迁移,至少目前看来有点不切实际好高骛远
logback的pattern
appName和instance等基础的信息不再logback里面配置
原因是:交付给使用方的东西,依赖越少越好,尽可能的在中间层实现(就好比容器的基础参数,会在采集器里面实现)
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} |%thread |%level |%logger |%class#%method:%line |%mdc{traceId:--} |%replace(%msg){'\|','-'}%n </pattern>
哪个配置参数因为性能问题不能打,但是要把 | 分隔符留下用 - 代替,例如:不想打:%class#%method:%line
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} |%thread |%level |%logger |- |%mdc{traceId:--} |%replace(%msg){'\|','-'}%n </pattern>
尽可能用单词,让别人也能看懂,咱们用到的参数讲解,像${PID}说是父线程ID这种搞不懂的洋文化,弄清楚再添加
| conversion word | effect | 描述 | |
|---|---|---|---|
| ``` | |||
| %date{yyyy-MM-dd HH:mm:ss.SSS} |
| %thread | -- | 排查问题要用到的线程ID | |
| %level | -- | 展示当前日志的级别,不同级别在后续的告警模块至关重要 | |
| %logger | **logger**{<!-- -->*length*} | length不配置,原因展示最全的logName | *输出日志的logger名,可有一个整形参数,功能是缩短logger名,设置为0表示只输入logger最右边点符号之后的字符串。* |
| ```
%class#%method:%line
``` | -- | %class#%method:%line--组合使用,快速定位是哪一行除了问题 | *输出执行记录请求的调用者的全限定名。尽量避免使用,除非执行速度不造成任何问题。(例如:WARN级别打开)* |
| ```
%mdc{traceId:--}
``` | -- | 获取traceId,链路追踪 | |
| ```
%replace(%msg){'\|','-'}
``` | -- | 这个replace是因为 \| 在日志格式中有重要的作用 | |
| %n | -- | -- | |
样例:
最全的
| `2021``-``04``-``28` `18``:``20``:``46.357` `\|my-grpc-executor-``5` `\|WARN \|grpc-access-logger \|com.xueqiu.infra.spring.grpc.server.MetricsServerInterceptor$MetricsCall#close:``56` `\|3bca40cd916c7f5e \|SLOW helloworld.Greeter.SayHello[name: ``"name"``,]-2688ms-/``192.168``.``18.128``:``64320``-Status{code=OK, description=``null``, cause=``null``}` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
去除:%class#%method:%line 的
| `2021``-``04``-``28` `18``:``20``:``46.357` `\|my-grpc-executor-``5` `\|WARN \|grpc-access-logger \|- \|3bca40cd916c7f5e \|SLOW helloworld.Greeter.SayHello[name: ``"name"``,]-2688ms-/``192.168``.``18.128``:``64320``-Status{code=OK, description=``null``, cause=``null``}` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |