当前位置: 首页 > 后端技术 > Java

SpringBoot2中的默认日志管理和Logback配置细节

时间:2023-04-01 17:35:35 Java

SpringBoot对所有内部日志使用CommonsLogging,但对底层日志实现是开放的。在SpringBoot生态中,为JavaUtilLogging、Log4J2、Logback等常用日志框架提供了自动配置组件。每个Logger都可以配置为在控制台或文件中输出日志内容。默认情况下,我们在使用各种Starters时,都会使用Logback来实现日志管理。如何写日志介绍中写日志的方式有很多种,这里就不一一列举了,只说DD用的最多的方式!首先,在代码层面,我们先不纠结是使用默认的Logback还是Log4j,而是直接使用:Slf4j。为什么不管用Logback还是Log4j都能写出代码?这就是使用Slf4j的好处,为什么是Slf4j呢?英文全称:SimpleLoggingFacadeforJava,即:简单日志门面,并不是具体的日志解决方案,实际工作还是Logback或Log4j等日志框架。Slf4j是23种设计模式中门面模式的典型应用案例。通过Slf4j这样一个门面的抽象存在,在写完代码后,我们只依赖这个抽象的日志操作,具体的实现会在调用Slf4j门面的时候委托给具体的实现。例如,下面是一个简单的日志记录示例:@Slf4j@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);log.error("你好世界");log.warn("你好世界");log.info("你好世界");log.debug("你好世界");log.trace("你好世界");注意:这里我们传入了pom.在xml中引入了lombok,然后使用@Slf4j语句引入了Slf4j的日志记录对象,就可以很方便的使用它来进行日志记录了。而这个日志如何写到控制台或文件中,取决于SpringBoot项目中引入的具体日志框架。默认情况下,它是Logback。日志元素启动任意一个SpringBoot项目,我们可以在控制台看到很多日志信息,比如下面的日志:日志的输出内容有7个元素,分别为:timeanddate:精确到毫秒的日志level:ERROR,WARN,INFO,DEBUGorTRACEProcessIDDelimiter:---IdentifythestartoftheactuallogThreadname:用方括号括起来(可能截断控制台输出)Loggername:通常使用源代码的类名日志内容日志输出在SpringBoot应用中,日志默认会输出到控制台。默认输出日志级别包括:ERROR、WARN和INFO。我们可以帮助上面编写的HelloWorld示例运行以验证此类默认设置。:2021-12-2817:37:25.578INFO65136---[main]com.didispace.chapter81.Application:在2.695秒内启动应用程序(JVM运行3.957)2021-12-2817:37:25.579错误65136---[main]com.didispace.chapter81.Application:HelloWorld2021-12-2817:37:25.579WARN65136---[main]com.didispace.chapter81.Application:HelloWorld2021-12-2817:37:25.579INFO65136---[main]com.didispace.chapter81.Application:HelloWorld打开DEBUG日志我们可以通过两种方式切换到DEBUG级别:第一种:运行命令后加上--debug标志,如:$java-jarmyapp.jar--debug第二种:在配置文件application.properties中配置debug=true这里开启的DEBUG日志只影响核心Logger,包括嵌入式容器、hibernate、spring等框架级别会输出更多的内容,但是自己应用的日志在DEBUG级别是不会输出的。从下面的截图可以看出,我们自己写的debug级别的HelloWorld是没有输出日志的。配置下面介绍一些常用的日志配置,帮助我们更好的管理日志内容。彩色输出如果您的终端支持ANSI,设置彩色输出将使日志更具可读性。它通过在application.properties中设置spring.output.ansi.enabled参数来支持,它有三个选项:NEVER:禁用ANSI彩色输出DETECT:它将检查终端是否支持ANSI,如果是,则使用彩色输出(默认项)始终:始终使用ANSI彩色格式进行输出。如果终端不支持,就会有很多干扰信息。不建议使用。注意:在SpringBoot1.x中,默认值为NEVER,2.x之后,默认值为DETECT。所以看看我们上面的截图,它已经默认着色了。所以如果你是SpringBoot2.x版本的用户,基本不需要修改。文件输出SpringBoot默认的配置只会输出到控制台,不会记录到文件中,但是我们在生产环境中使用时通常需要记录到文件中。增加文件输出,需要在配置文件application.properties中配置几个参数,比如这样:logging.file.name=run.loglogging.file.path=./logging.file.name:设置日志记录的文件名。文件。path:设置文件路径注意:这个和1.x版本不同。1.x中对应的参数是logging.file和logging.path。文件滚动将日志一直输出在一个文件中显然是不合适的,任何日志框架都会为此准备日志文件的滚动配置。由于本文会默认配置,所以是Logback的配置,具体为:logging.logback.rollingpolicy.file-name-pattern:用于创建日志文件的文件名模式。logging.logback.rollingpolicy.clean-history-on-start:应用启动时是否清理日志归档,默认为false,不清理logging.logback.rollingpolicy.max-history:最大归档数logfilestokeep,默认7个删除前的日志文件,默认为0B级别控制如果想对每个Logger做一些简单的输出级别控制,只需要在application.properties中配置即可。配置格式:logging.level.*=LEVELlogging.level:日志级别控制前缀,*为包名或Logger名.didispace=DEBUG:com.didispace包下的所有类输出DEBUG级别的日志。root=WARN:根日志以WARN级别输出。可以导出成功。自定义日志配置由于日志服务一般在ApplicationContext创建之前就已经初始化了,所以不必通过Spring的配置文件来控制。因此,通过系统属性和传统的SpringBoot外部配置文件,仍然可以很好地支持日志的控制和管理。根据不同的日志系统,可以按照以下规则组织配置文件名,即可正确加载:spring.xml,log4j2.xmlJDK(JavaUtilLogging):logging.propertiesSpringBoot官方推荐使用带-spring的文件名作为你的日志配置(比如使用logback-spring.xml而不是logback.xml)中的自定义输出格式SpringBoot中,可以通过在application.properties中配置如下参数来控制输出格式:logging.pattern.console:定义输出到控制台的样式(不支持JDKLogger)logging.pattern.file:定义样式输出到文件(不支持JDKLogger)好了,今天的学习就到这里!如果你在学习过程中遇到困难?可以加入我们超优质的Spring技术交流群,参与交流讨论,更好的学习进步!摘要页《Spring Boot基础教程》可以直接点进去!,欢迎收藏和转发支持!代码示例本文的完整工程可以查看下面仓库2.x目录下的chapter8-1工程:Github:https://github.com/dyc87112/SpringBoot-Learning/Gitee:https://gitee.com/didispace/SpringBoot-Learning/如果您觉得本文不错,欢迎Star支持,您的关注是我坚持的动力!欢迎来到我的公众号:程序员DD。第一时间了解行业前沿资讯,分享深度技术干货,获取优质学习资源