Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

第 31 章 Spring boot with Logging

目录

31.1. 配置日志文件
31.1.1. 日志输出级别
31.1.2. Spring boot 2.1 以后的版本不打印 Mapped 日志问题
31.1.3. 禁止控制台输出日志
31.1.4. 定制日志格式
31.1.5. 彩色输出
31.2. 打印日志
31.2.1. lombok
31.3. logback 配置详解
31.3.1. 标准输出
31.3.2. 禁止 logback 日志输出
31.3.3. 指定Class过滤日志
31.3.4. configuration 属性配置
31.3.5. contextName 设置上下文名称
31.3.6. property 设置变量
31.3.7. encoder 日志格式设置
31.3.8. RollingFileAppender
31.3.9. 日志过滤
31.3.10. 标准输出
31.3.11. MDC
31.3.12. 日志写入 MongoDB
31.3.13. 日志发送给 logstash
31.3.14. fluentd
31.3.15. Loki4j Logback
31.4. Log4j2 + Gelf + Logstash
31.4.1. Maven 配置
31.4.2. log4j2.xml 配置
31.4.3. Java 测试代码
31.4.4. Logstash 配置
31.4.5. 测试结果
31.4.6. Log4j2 更多技巧
31.5. 日志报警
31.5.1. Logstash 配置
31.5.2. 监控 SpringBootApplication 的启动和退出
31.6. Spring boot with ELK(Elasticsearch + Logstash + Kibana)
31.6.1. TCP 方案
31.6.2. Redis 方案
31.6.3. Kafka 方案
31.6.4. Other

通过命令行改变日志的输出级别

	
java -jar app.jar --debug  

在application.properties中配置
debug=true  

application.yml
debug=true  

相同的方式使能TRACE级别的日志
java -jar app.jar --trace  

application.properties
trace=true

application.yml
trace=true	
	
	

31.1. 配置日志文件

一般的日志需求可以通过配置 application.properties实现。

Spring Boot中 日志默认是输出到控制台的,这样是为了方便开发人员,但是在生产环境中应该输出到日志文件中。

配置如下

  • logging.file.path: 指定日志文件的路径
  • logging.file.name: 日志的文件名(默认为spring.log)
  • logging.pattern.console: 控制台的输出格式
  • logging.pattern.file: 日志文件的输出格式
  • logging.pattern.level: 定义渲染不同级别日志的格式。默认是%5p.
[提示]提示

注意:这两个属性不能同时配置,只需要配置一个即可。

[提示]提示

旧版本

logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log

logging.path,设置目录,如果 logging.file 没有设置,会在该目录下创建spring.log文件作为默认日志文件。

		
logging.file=target/spring.log
#logging.path=
		
			

如果仍不能满足可以使用 logback.xml 配置日志。

		
logging.path=/tmp
logging.config=classpath:logback.xml
		
			

31.1.1. 日志输出级别

		
几种常见的日志级别由低到高分为:TRACE < DEBUG < INFO < WARN < ERROR < FATAL
		
			

显示所有DEBUG信息

			
logging.level.root=DEBUG			
			
			

仅仅显示 springframework 调试信息

			
logging.level.org.springframework.web=DEBUG			
			
			

仅仅显示 cn.netkiller.web.TestController 调试信息

			
private static final Logger log = LoggerFactory.getLogger(TestController.class);

log.debug(message);

logging.level.cn.netkiller.web.TestController=DEBUG			
			

			

YAML 配置文件写法

			
logging:
  level:
    root: info
    cn.netkiller.test: debug
    cn.netkiller.sharding.MonthShardingAlgorithm: DEBUG
			
			

31.1.2. Spring boot 2.1 以后的版本不打印 Mapped 日志问题

		
logging.level.org.springframework.web=trace		
		
			

31.1.3. 禁止控制台输出日志

禁止控制台日志输出,同时将日志写入日志文件.

src/main/resources/application.properties

			
logging.file.path=/tmp
logging.file.name=/tmp/spring.log
logging.level.root=INFO
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
			
			

src/main/resources/logback.xml

			
$ cat src/main/resources/logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <include resource="org/springframework/boot/logging/logback/defaults.xml" />
  <include resource="org/springframework/boot/logging/logback/file-appender.xml" />

  <root level="INFO">
    <appender-ref ref="FILE" />
  </root>
</configuration>
			
			

使用 java -jar project-version-xxx.jar 启动后控制不会再输出日志

31.1.4. 定制日志格式

定制日志格式有两个配置

  • logging.pattern.console:控制台的输出格式
  • logging.pattern.file:日志文件的输出格式

分别是控制台的输出格式和文件中的日志输出格式

举例

			
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n			
			
			

格式说明

			
%d{HH:mm:ss.SSS} 日志输出时间
%thread 	输出日志的进程名字,这在Web应用以及异步任务处理中很有用
%-5level 	日志级别,并且使用5个字符靠左对齐
%logger		日志输出者的名字
%msg		日志消息
%n			平台的换行符
			
			

31.1.5. 彩色输出

			
spring.main.banner-mode=off 
spring.output.ansi.enabled=ALWAYS
logging.pattern.console=%clr(%d{yy-MM-dd E HH:mm:ss.SSS}){blue} %clr(%-5p) %clr(${PID}){faint} %clr(---){faint} %clr([%8.15t]){cyan} %clr(%-40.40logger{0}){blue} %clr(:){red} %clr(%m){faint}%n