Springboot日志配置
Springboot日志配置
生产环境日志及预警 https://blog.csdn.net/weixin_41158378/article/details/110701328
1. SpringBoot 日志常用配置
日志常用配置项 | 默认值 | 说明 |
---|---|---|
logging.file | 日志输出的文件 | |
logging.level.ROOT | info | 设置日志的输出级别 |
logging.level.* | info | 定义指定包的输出级别 |
logging.config | logback-spring.xml | 日志的配置文件 |
# 日志输出的地址:Spring Boot默认并没有进行文件输出,只在控制台中进行了打印
logging.file=/home/zhou
# 日志级别 debug-> info -> warning -> error
# 默认级别为 info
# 如果设置了debug=true的时候,日志级别会自动降低为debug
# ROOT代表默认全局设置
logging.level.ROOT=INFO
# 可以设置指定包的输出级别,这样的话,指定的包,级别以下的日志就不在打印或者写入日志文件
logging.level.org.springframework=ERROR
logging.level.org.apache=ERROR
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="D:/log" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--按pattern指定的路径格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符,编码为UTF-8-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 定义一个日滚动(每天生成一份)的日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符,编码为UTF-8-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 在日滚动文件中,强制只保存错误INFO级别以上的信息 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 定义日志全局最低输出级别,同时向控制台和日滚动文件输出 -->
<root level="INFO">
<appender-ref ref="console" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
想要自定义文件名的可在配置文件中添加logging.config配置
logging.config=classpath:loggging-dev.xml
2. 选择合适的日志打印级别
-
trace:更加具体的调试信息,例如调试用了什么方法,参数是什么,可以用trace
-
debug:在项目开发阶段,调试程序的正确性,可以使用debug
-
info:正常的业务执行流程,系统的启动/关闭,需要做的审计等都可以使用info
-
warn:不是错误,不会影响程序的正常执行,但是不建议这么做,可以用warn
-
error:程序出现某种错误,需要介入处理
3. 合理日志记录,需要遵守的原则
-
搞清楚当前工程的日志级别(开发、测试还是生产环境),保证日志可以被打印
-
使用参数化形式{}占位,[]进行参数隔离
-
日志文件的名称应该是可以自解释的,通常至少会要求名称中包含类型标识和时间标识
-
日志要有滚动策略,这是考虑到避免单个文件过大,以及磁盘占用问题
让你的日志有意义且不冗余
-
HTTP请求和远程接口调用(HTTP或RPA)时,需要打印请求的入参和结果,如果入参和结果参数都很大,只需要打印核心的参数和结果(logging.info)
-
程序异常的原因(logging.error)
-
特殊的条件分支
需要规避的日志打印过程
-
以下场景不应该打日志
- 大数据日志 空间的浪费,可以使用trace或debug,避免生产环境出现这样的大数据日志
- 在循环中打日志,特别是大循环 排查问题困难
- 没有意义的日志,对于系统维护没有帮助
- 如果日志什么都说明不了,那一定要考虑修改或删除这条日志,混淆视听
- 密码,邮箱,手机号码属于私密信息,为了避免数据泄露,不应该打,数据泄露
日志能够对业务逻辑进行解释
-
日志应该包含哪些元素
日志级别、日志内容、日志时间、线程名称、类方法名 (行号、异常堆栈:可有可无)