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

第 6 章 Spring boot with Logging

目录

6.1. 配置日志文件
6.1.1. 日志输出级别
6.1.2. Spring boot 2.1 以后的版本不打印 Mapped 日志问题
6.1.3. 禁止控制台输出日志
6.1.4. 定制日志格式
6.1.5. 彩色输出
6.2. 打印日志
6.2.1. lombok
6.3. logback 配置详解
6.3.1. 标准输出
6.3.2. 禁止 logback 日志输出
6.3.3. 指定Class过滤日志
6.3.4. configuration 属性配置
6.3.5. contextName 设置上下文名称
6.3.6. property 设置变量
6.3.7. encoder 日志格式设置
6.3.8. RollingFileAppender
6.3.9. 日志过滤
6.3.10. 标准输出
6.3.11. MDC
6.3.12. 日志写入 MongoDB
6.3.13. 日志发送给 logstash
6.3.14. fluentd
6.3.15. Loki4j Logback
6.4. Log4j2 + Gelf + Logstash
6.4.1. Maven 配置
6.4.2. log4j2.xml 配置
6.4.3. Java 测试代码
6.4.4. Logstash 配置
6.4.5. 测试结果
6.4.6. Log4j2 更多技巧
6.5. 日志报警
6.5.1. Logstash 配置
6.5.2. 监控 SpringBootApplication 的启动和退出
6.6. Spring boot with ELK(Elasticsearch + Logstash + Kibana)
6.6.1. TCP 方案
6.6.2. Redis 方案
6.6.3. Kafka 方案
6.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	
	
	

6.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
		
			

6.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
			
			

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

		
logging.level.org.springframework.web=trace		
		
			

6.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 启动后控制不会再输出日志

6.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			平台的换行符
			
			

6.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