SpringBoot项目集成日志的实现方法
作者:让蛋蛋飞 发布时间:2023-06-02 23:00:23
SpringBoot使用Commons Logging进行所有内部日志记录,但保留底层日志实现。默认提供了Java Util Logging, Log4j2 和Logback日志配置。在每种情况下,都预先配置为使用控制台输出,并且还提供了可选的文件输出。(来自官网)
日志格式
SpringBoot默认的日志输出如下所示:
2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
输出以下项目:
日期和时间:毫秒精度并且容易排序
日志级别:ERROR, WARN, INFO, DEBUG, TRACE
进程ID
--- 分隔符来区分实际日志的开始
线程名:括在方括号中(可能会被截断)
日志记录器名:这通常是源类名(通常缩写)
日志信息
Logback中没有FATAL(致命)级别,它被映射到ERROR级别
( 日志格式 来自 官网 )
控制台输出
SpringBoot控制台输出默认支持三种日志级别:ERROR,WARN和INFO
如果还想输出别的级别日志,例如DEBUG或TRACE(只能二选一),如下操作:
启动应用程序时,增加--debug或--trace标志
$ java -jar myapp.jar -- debug
说明:使用debug调试模式启动应用程序不会将应用程序配置为使用DEBUG级别记录日志。复制代码
在application.yml中(或application.properties中)增加debug: true或trace: true(或debug=true/trace=true)
application.yml文件:
debug: true
application.properties文件:
debug=true
多彩输出:
如果终端支持ANSI(表示颜色),可以设置彩色输出。
application.yml中设置:
# 检查终端是否支持ANSI,是的话就采用彩色输出
spring:
output:
ansi:
enabled: detect
application.properties中设置:
# 检查终端是否支持ANSI,是的话就采用彩色输出
spring.output.ansi.enabled=detect
文件输出
SpringBoot默认配置日志只会输出到控制台,并不会记录到文件中,但通常生产环境需要把日志记录到文件中。
配置属性如下:
logging.file: 设置日志输出文件,绝对路径或相对路径都可以。
logging.path: 设置日志输出目录,会在该目录下创建spring.log文件,并写入日志内容。
日志文件在达到10 MB时滚动输出,并且与控制台输出一样,默认情况下会记录ERROR,WARN和INFO级别的日志。可以使用logging.file.max-size属性更改大小限制。除非已设置logging.file.max-history属性,否则以前轮换的日志文件将被无限期归档。(来自官网)
注意点:
日志记录系统在应用程序生命周期的早期初始化。因此,在通过@PropertySource注解加载的属性文件中找不到日志记录属性。
日志记录属性独立于实际的日志记录基础结构。因此,SpringBoot不管理特定的配置密钥(例如Logback的logback.configurationFile)。 (来自官网)
application.yml中设置:
logging:
# 设置相对路径的日志输出文件
file: log/my.log
# 设置日志输出路径,默认会生成log/spring.log日志文件
path: log
logging:
# 设置绝对路径的日志输出文件
file: D:\ideaProjects\SpringBootDemo\log1\mylog1.log
# 设置日志输出路径,默认会生成log/spring.log日志文件
path: log
application.properties中设置:
logging.file=log/my.log
logging.path=log
级别控制
配置属性格式:logging.level.*=LEVEL
logging.level: 日志级别控制前缀,*为包名或Logger名
LEVEL: 选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
application.yml中设置:
logging:
level:
# com.example.demo包下所有class以DEBUG级别输出
com.example.demo: DEBUG
# root日志以INFO级别输出
root: INFO
说明:
配置日志级别值大小写均可,例如:设置成debug/info
application.properties中设置:
logging.level.com.example.demo=DEBUG
logging.level.root=INFO
说明:配置日志级别值大小写均可,例如:设置成debug/info
刨根问底,死磕自己(选看)
1. 日志级别设置选项
源码中系统日志级别是个枚举类,列出了所有日志级别,如下截图:
根据在application.yml中设置的LEVEL值,匹配系统日志枚举类,最终设置系统相应包下的日志级别。
SpringBoot官网: https://docs.spring.io/spring-boot/docs/2.1.2.RELEASE/reference/htmlsingle/
来源:https://juejin.im/post/5c525fac51882525800544b4


猜你喜欢
- 1.为什么要使用synchronized在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字syn
- 在日常工作中,我们可能需要连接多个MongoDB数据源,比如用户库user,日志库log。本章我们来记录连接多个数据源的步骤,以两个数据源为
- 在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell。先把C写出来的make成
- Springboot2.x的session和cookie有效期session和cookie的相关区别和联系就不介绍了,这里就记录一下笔记。背
- 一.概述在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条
- 原本计划这一篇来总结JSP,由于JSP的内容比较多,又想着晚上跑跑步减减肥,所以今天先介绍Filter以及它的使用举例,这样的话还有些时间可
- 我们做项目实际中经常会遇到这样的情况,创建一个common项目(Maven项目)作为公用项目,common中有很多工具类可以供其它多个项目调
- <profiles> <profile> <
- 1.监听(Listener)<!-- 配置监听 --><listener><listener-class>
- •readonly和const都是用来标识常量的[1]。•const可用于修饰class的field或者一个局部变量(local varia
- 本文实例讲述了Android编程重写ViewGroup实现卡片布局的方法。分享给大家供大家参考,具体如下:实现效果如图:实现思路1. 重写o
- 本文实例讲述了java实现的DES加密算法。分享给大家供大家参考,具体如下:一、DES加密算法介绍1、要求密钥必须是8个字节,即64bit长
- 开发工具下载:Tomcat下载:wget http://learning.happymmall.com/tomcat/apache-tomc
- 我的安卓开发经历始于一个原生安卓项目开发。后来由于公司有个项目与几家医疗设备公司合作,需要我写安卓端的桥接代码给 react native
- 下面是20个非常有用的Java程序片段,希望能对你有用。1. 字符串有整型的相互转换String a = String.valueOf(2)
- 前言在Android开发过程中,我发现很多安卓源代码里应用了设计模式,比较常用的有适配器模式(各种adapter),建造者模式(Alert
- 本文实例为大家分享了C语言实现银行系统的具体代码,供大家参考,具体内容如下1.实现要求生成一个1000-1000000之间的随机数来代表账户
- 在实际应用中,我们往往有需要比较两个自定义对象大小的地方。而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我
- 今天,给大家分享一个Java后端利用Phantomjs实现生成图片的功能,同学们使用的时候,可以参考下!PhantomJS简介首先,什么是P
- 一个很常用的功能,一个ViewPager会自动滚动,并且有一排小圆点黑和白来指示当前的滚动进度首先写一个ViewPager的适配器,这里这个