SpringBoot对日志框架的统一处理以及日志设置

一、SpringBoot对日志框架的统一处理

导入SpringBoot启动器

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

默认使用spring-boot-starter-logging做日志依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

底层依赖关系如下图,它已经将log4j、jul、jcl进行偷天换日,使用了slf4j替换包将其替换

总结:

  1. SpringBoot底层也是使用slf4j+logback的方式进行日志记录。

  2. SpringBoot也把其他的日志都替换成了slf4j。

  3. 如果我们要引入其他框架,一定要把这个框架的默认日志依赖移除掉。例如,Spring框架用的是commons-logging

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <exclusions>
	    <exclusion>
		    <groupId>commons-logging</groupId>
		    <artifactId>commons-logging</artifactId>
	    </exclusion>
    </exclusions>
</dependency>

二、SpringBoot日志设置

  • 日志级别由低到高:trace、debug、info、warning、error。
  • SpringBoot的默认日志级别为info,调整日志级别的方法为:在application.propositions文件中进行调整:logging.level.包名(.类名)=级别A--->调整某个包(类)的最低日志级别为A。
  • 修改默认日志配置:

logging.file

logging.pathExampleDescription
(none)(none) 只在控制台输出
指定文件名(none)my.log

输出日志到my.log文件

(none)指定目录/var/log

输出到指定目录的spring.log文件中

logging.file=springboot.log      不指定路径,在当前项目下生成名为springboot.log的日志
logging.file=E:/springboot.log   指定完整的路径,在E盘下生成名为springboot.log的日志

logging.path=/spring/log         在当前项目磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 
                                 spring.log作为默认文件

指定在控制台输出的日志的格式
logging.pattern.console=%d{yyyy‐MM‐dd} [%thread] %‐5level %logger{50} ‐ %msg%n
 
指定文件中日志输出的格式
logging.pattern.file=%d{yyyy‐MM‐dd} ===[%thread] ===%‐5level ===%logger{50} ====%msg%n

日志输出格式参照:

%d-->表示日期时间,
%thread-->表示线程名,
%‐5level-->级别从左显示5个字符宽度
%logger{50} -->表示logger名字最长50个字符,否则按照句点分割。
%msg-->日志消息,%n是换行符

%d{yyyy‐MM‐dd HH:mm:ss.SSS} [%thread] %‐5level %logger{50} ‐ %msg%n
  • 自定义日志配置

1 给类路径下放上每个日志框架自己的配置文件,SpringBoot将不使用默认配置

日志框架配置文件
Logback

logback-spring.xml,logback-spring.groovy,logback.xml ,logback.groovy

Log4j2

log4j2-spring.xml,log4j2.xml

JDK (Java UtilLogging)

logging.properties

2 如果直接使用logback-spring.xml为文件名,日志框架就不会直接加载日志的配置项,而是由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能:

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <!--可以指定某段配置只在某个环境下生效-->
        <!--生产环境生效-->
        <springProfile name="dev">
            <pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} ‐‐‐‐> [%thread] ‐‐‐> %‐5level%logger{50} ‐ %msg%n</pattern>
        </springProfile>
        <!--非生产环境生效-->
        <springProfile name="!dev">
            <pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} ==== [%thread] ==== %‐5level%logger{50} ‐ %msg%n
            </pattern>
        </springProfile>
    </layout>
</appender>

如果直接使用logback.xml为文件名,它将直接被日志框架识别,如果继续使用profile功能,会有以下错误:

no applicable action for [springProfile]
只有把命运掌握在自己手中,从今天起开始努力,即使暂时看不到希望,也要相信自己。因为比你牛几倍的人,依然在努力。
原文地址:https://www.cnblogs.com/freesky168/p/14358239.html