SpringBoot学习笔记6-SpringBoot的日志

前言

以spring官方文档为基础,官方地址:Spring Boot
目前官方正式版本最新为:2.5.6(这个学习笔记系列基本是以翻译为主,不用浪费时间期望获取更多。更多是给自己看官方文档做的的一个笔记)
当前篇的内容:介绍官方文档2.5.6的第七章之SpringApplication特性_日志
参考文章有:1. SpringBoot官方文档 2. SpringBoot之Logging

1. 默认设置

  • 默认控制台输出日志
  • 默认使用 Logback 记录日志(可选择Java Util Logging、Log4J2和Logback,也可以)
  • 默认日志级别:INFO(日志级别:ERROR,WARN,INFO,DEBUG,或TRACE)

不同的日志框架,默认的配置文件名称不太。
SpringBoot学习笔记6-SpringBoot的日志
通常情况下,日志是由一个抽象层+实现层的组合来搭建的。抽象层有:JCL、SLF4J、jboss-logging,实现层有jul、log4j、log4j2、logback。而SpringBoot选择SLF4J+Logback的组合。
当我们使用其他框架时,框架自身可能也带着自己的日志框架。可以选择在pom文件对应框架中排除掉(exclusion)

而如果想切换SpringBoot的默认日志框架,需要先排除starter中的Logback依赖以及Log4J替换包的依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 排除对于Logback的依赖-->
            <exclusions>
                <exclusion>
                    <artifactId>logback-classic</artifactId>
                    <groupId>ch.qos.logback</groupId>
                </exclusion>
                <!-- 排除对于Log4j的替换包依赖 -->
                <exclusion>
                    <artifactId>log4j-to-slf4j</artifactId>
                    <groupId>org.apache.logging.log4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

并且引入SLF4J对于Log4j的适配包

<!-- 增加SLF4J对于Log4J的是适配器依赖 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>

2. 日志格式

2019-03-05 10:57:51.112 INFO 45469 --- [main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52
2019-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms
2019-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2019-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。
进程标识。
一个—分离器来区分实际日志消息的开始。
线程名称:括在方括号中(可能会被截断以用于控制台输出)。
记录器名称:这通常是源类名称(通常缩写)。
日志消息。

默认日志输出颜色:
SpringBoot学习笔记6-SpringBoot的日志

3. 文件输出

默认情况下,Spring Boot 只记录到控制台,不写入日志文件。如果你想在控制台输出之外写入日志文件,你需要设置一个logging.file.name或者logging.file.path属性(例如在application.properties中配置)。如果不特殊设置,输出的文件日志级别也是INFO。
logging.file.path和logging.file.name不同时存在,同时存在以logging.file.name为主。

# 生成到指定路径,日志名称spring.log。
logging.file.path=output/logs
# 不指定的情况下默认生成在项目根目录(也可指定绝对路径),日志名称随意起
logging.file.name=myLog.log

4. 日志级别

所有支持的日志系统都可以通过Spring Environment来指定日志级别,例如application.properties,可以使用“logging.level.*=LEVEL”来指定日志的级别,"LEVEL"的取值可以是TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF。配置示例如下:

#root日志以WARN级别输出
logging.level.root=WARN

#org.springframework.web包下的日志以DEBUG级别输出 
logging.level.org.springframework.web=DEBUG 

#org.hibernate包下的日志以ERROR级别输出
logging.level.org.hibernate=ERROR 

如果,我们需要指定我们的应用日志级别了,我们也可以使用同样的方式,如下(com.example为包名):

logging.level.com.example=INFO

5. 自定义日志输出格式

可以通过logging.pattern.file以及logging.pattern.level来配置我们需要的日志输出格式,例如(只针对logback):

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

6. 和Profile结合使用的日志配置

<springProfile name="staging">
    <!-- 当profile名为staging时,当前日志配置会启用 -->
</springProfile>

<springProfile name="dev | staging">
    <!-- 当profile名为dev或staging时,当前日志配置会启用 -->
</springProfile>

<springProfile name="!production">
    <!-- 当profile名不为production时,当前日志配置会启用 -->
</springProfile>

上一篇:Python接口自动化之logging日志


下一篇:Python接口自动化之logging封装及实战