logback推荐配置
配置的正确姿势
线上和开发环境的配置要分离,对于java项目
src/main/resources 目录下的东西都是正式环境使用的
src/test/resources 目录下的东西才是本机开发环境使用的
如果你发现自己本机开发启动程序的时候,经常要修改 src/main/resources 目录下的东东,那就说明你用错了。
这样做的一个后果就是,你提交代码的时候,忘记修改回来,结果发布到线上去了。轻则日志量暴增,重则引起运营事故。
所以大家千万注意!!!
推荐的配置内容
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
<configuration scan="false" scanPeriod="60 seconds" debug="false"> <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 可让每天产生一个日志文件,最多 7 个,自动回滚 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${catalina.home}/logs/fs-app-%d{yyyyMMdd}.log.zip</fileNamePattern> <maxHistory>7</maxHistory> </rollingPolicy> <encoder> <!-- 日志中默认打印traceId和userId,方便定位问题,异常栈中去掉包含如下字符的行避免打印很多无用的信息--> <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{12} %X{traceId} %X{userId} %msg%rEx{full, java.lang.Thread, javassist, sun.reflect, org.springframework, org.apache, org.eclipse.jetty, $Proxy, java.net, java.io, javax.servlet, org.junit, com.mysql, com.sun, org.mybatis.spring, cglib, CGLIB, java.util.concurrent, okhttp, org.jboss, }%n </pattern> </encoder> </appender> <!-- 异步输出日志避免阻塞服务 --> <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> <queueSize>512</queueSize> <appender-ref ref="RollingFile"/> </appender> <!-- 配置基础组件为WARN级别,避免打印过多影响服务自己日志 --> <logger name="druid.sql" level="INFO"/> <logger name="org.hibernate" level="WARN"/> <logger name="org.springframework" level="WARN"/> <logger name="org.apache" level="WARN"/> <root level="info"> <appender-ref ref="ASYNC"/> </root></configuration> |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<configuration scan="false" scanPeriod="60 seconds" debug="false"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{12} %X{traceId} %X{userId} %msg%n</pattern> </encoder> </appender> <logger name="org.hibernate" level="WARN"/> <logger name="org.springframework" level="WARN"/> <logger name="org.apache" level="WARN"/> <root level="DEBUG"> <appender-ref ref="STDOUT"/> </root></configuration> |
推荐日志级别
极为严格的做法是:只要log.error()记录的内容,都需要人及时响应的,有些公司会针对error进行字符串告警。
那么,针对一些:没有权限、参数错误、非法请求等,由于不合理的请求进来的,就建议打印warn而不是error,否则狼来了喊多了就没有用了。也会淹没真正的错误。
简单来讲,真正影响到正常用户的正常请求而且需要及时响应的错误,就打印ERROR,否则打印WARN。
一般信息打印info,针对调试操作,打印debug
推荐使用日志占位符
log.info("this is a={}, b={}", a, b)
使用占位符,是真正需要打印的时候,才进行字符串拼接;如果不打印就不会拼接字符串。
log.error("cannot open url={}", url, e)
针对error,务必把异常栈打印出来,这里最有一个exception对象,不需要使用占位符,如果多一个占位符,则只会打印e.getMessage()的内容,就不方便查问题了。
和日志中心的配合
通过引入日志中心的组件并添加配置,可以实现把特定logger和特定用户的日志进入日志中心,异常信息入日志中心等功能。
<dependency> <groupId>com.fxiaoke</groupId> <artifactId>logconfig-core</artifactId> <version>${logconfig-core.version}</version></dependency><dependency> <groupId>com.fxiaoke.common</groupId> <artifactId>metrics-oss</artifactId> <version>${metrics-oss.version}</version></dependency> |
修改spring的配置文件,加入如下内容
<bean class="com.fxiaoke.metrics.MetricsConfiguration"/> |
这样就可以通过 http://oss.firstshare.cn/logconf/ 在线调整日志级别,以及查看日志内容了
可以在 进程管理系统 http://oss.firstshare.cn/pms/ 查看自己进程的jvm信息,cpu和内容消耗等信息
还可以在日志中心 http://log.foneshare.cn/ 查到自己服务的所有error,不必登录多个机器查找了。可以针对userId搜索错误情况。
简易日志中心: http://oss.foneshare.cn/flog/
kibana:http://log.foneshare.cn/






浙公网安备 33010602011771号