总结:全网最详细,Spring框架整合各种常用日志方法

总结:全网最详细,Spring框架整合各种常用日志方法

  • 一·各种框架日志的背景了解:
    • (1)Spring,SpringMVC框架本身没有自带的日志框架。因此利用SSM开发项目时,就需要整合一个外部的日志框架(例如:log4j,log4j2,logback,Slf4j等等)
    • (2)SpringBoot,Mybatis,Mybatis-Plus框架,以及Tomcat服务器,都有自带的默认日志框架。因此可以不整合外部的日志框架。(但是默认的日志框架,没有某些外部的日志框架好用,因此开发时,也经常整合外部日志框架)
    • (3)Spring,SpringMVC,SpringBoot,Mybatis等框架整合外部的日志框架方法都是类似的。具体请参考下文。
  • 二·“Spring+Mybatis”整合日志框架的方法:
    • (1)开启默认日志框架:mybatis框架的
    • (2)整合外部日志框架:log4j+slf4j
    • (3)整合外部日志框架:logback+slf4j
  • 三·“SpringBoot+Mybatis-Plus”整合日志框架的方法:
    • (1)开启默认日志框架:boot日志是自动默认开启且是INFO级别,但MP的默认日志框架需要手动开启
    • (2)整合外部日志框架:logback+slf4j

一·各种框架日志的背景了解:

(1)Spring,SpringMVC框架本身没有自带的日志框架。因此利用SSM开发项目时,就需要整合一个外部的日志框架(例如:log4j,log4j2,logback,Slf4j等等)

(2)SpringBoot,Mybatis,Mybatis-Plus框架,以及Tomcat服务器,都有自带的默认日志框架。因此可以不整合外部的日志框架。(但是默认的日志框架,没有某些外部的日志框架好用,因此开发时,也经常整合外部日志框架)

(3)Spring,SpringMVC,SpringBoot,Mybatis等框架整合外部的日志框架方法都是类似的。具体请参考下文。

二·“Spring+Mybatis”整合日志框架的方法:

(1)开启默认日志框架:mybatis框架的

在mybatis核心配置文件中,开启 STDOUT_LOGGING 日志类型


<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
settings>

(2)整合外部日志框架:log4j+slf4j

第一步:导入相关依赖


        <dependency>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
            <version>1.2.17version>
        dependency>
        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-log4j12artifactId>
            <version>1.7.25version>
        dependency>

        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-apiartifactId>
            <version>1.7.25version>
        dependency>


第二步:在maven的resources资源文件夹下面,创建log4j的属性配置文件:log4j.properties

以下是 log4j.properties 的一个模板属性文件

#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file

#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/hong.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n

#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

第三步(可选):开启Mybatis框架支持的日志类型

在mybatis核心配置文件中,开启某种日志类型:(下面两种任选其一)

方式一:不整合外部日志框架,也可以使用


<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
settings>

方式二:必须整合log4j日志框架,才可以使用


<settings>
    <setting name="logImpl" value="LOG4J">setting>
settings>

注意:

(1)配置文件名不能随便改动,建议就用默认配置文件名称:“log4j.properties”

(2)项目里面可以正常使用@Slf4j注解

(3)整合外部日志框架:logback+slf4j

第一步:导入相关依赖


<dependency>
      <groupId>ch.qos.logbackgroupId>
      <artifactId>logback-coreartifactId>
      <version>1.2.3version>
    dependency>
    <dependency>
      <groupId>ch.qos.logbackgroupId>
      <artifactId>logback-classicartifactId>
      <version>1.2.3version>
    dependency>
    <dependency>
      <groupId>org.slf4jgroupId>
      <artifactId>slf4j-apiartifactId>
      <version>1.7.30version>
dependency>

第二步:在maven的resources资源文件夹下面,创建logback的xml配置文件:logback-spring.xml(注意:文件名不能随便改动)

以下是 logback-spring.xml 的一个模板配置文件


<configuration scan="true" scanPeriod="10 seconds">
    
    
    
    
    <contextName>logbackcontextName>
    
    
    <property name="log.path" value="D:/私人文件夹/学习笔记/24-谷粒学苑-在线教育系统笔记/logback"/>

    
    
    
    
    
    
    
    <property name="CONSOLE_LOG_PATTERN"
              value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level)
|%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>
    
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        
        
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFOlevel>
        filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}Pattern>
            
            <charset>UTF-8charset>
        encoder>
    appender>
    
    
    <appender name="INFO_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/log_info.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level
                %logger{50} - %msg%n
            pattern>
            <charset>UTF-8charset>
        encoder>
        
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-
                dd}.%i.log
            fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFOlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="WARN_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/log_warn.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level
                %logger{50} - %msg%n
            pattern>
            <charset>UTF-8charset> 
        encoder>
        
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-
                dd}.%i.log
            fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warnlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="ERROR_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/log_error.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level
                %logger{50} - %msg%n
            pattern>
            <charset>UTF-8charset> 
        encoder>
        
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-
                dd}.%i.log
            fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERRORlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    

    
    <springProfile name="dev">
        
        <logger name="com.guli" level="INFO"/>
        
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="WARN_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
        root>
    springProfile>
    
    <springProfile name="pro">
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="DEBUG_FILE"/>
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
            <appender-ref ref="WARN_FILE"/>
        root>
    springProfile>
configuration>

三·“SpringBoot+Mybatis-Plus”整合日志框架的方法:

(1)开启默认日志框架:boot日志是自动默认开启且是INFO级别,但MP的默认日志框架需要手动开启

下列配置,要在Boot项目的默认属性文件中配置:application.properties

#mybatis-plus日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

# 设置Boot项目的日志级别,默认INFO级别
logging.level.root=WARN

(2)整合外部日志框架:logback+slf4j

第一步:导入相关依赖

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

第二步:安装彩色日志插件:grep-console,IDEA默认就有不需要额外装

第三步:在maven的resources资源文件夹下面,创建logback的xml配置文件:logback-spring.xml(注意:文件名不能随便改动)

以下是 logback-spring.xml 的一个模板配置文件


<configuration scan="true" scanPeriod="10 seconds">
    
    
    
    
    <contextName>logbackcontextName>
    
    
    <property name="log.path" value="D:/私人文件夹/学习笔记/24-谷粒学苑-在线教育系统笔记/logback"/>

    
    
    
    
    
    
    
    <property name="CONSOLE_LOG_PATTERN"
              value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level)
|%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>
    
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        
        
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFOlevel>
        filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}Pattern>
            
            <charset>UTF-8charset>
        encoder>
    appender>
    
    
    <appender name="INFO_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/log_info.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level
                %logger{50} - %msg%n
            pattern>
            <charset>UTF-8charset>
        encoder>
        
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-
                dd}.%i.log
            fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFOlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="WARN_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/log_warn.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level
                %logger{50} - %msg%n
            pattern>
            <charset>UTF-8charset> 
        encoder>
        
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-
                dd}.%i.log
            fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warnlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="ERROR_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/log_error.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level
                %logger{50} - %msg%n
            pattern>
            <charset>UTF-8charset> 
        encoder>
        
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-
                dd}.%i.log
            fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERRORlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    

    
    <springProfile name="dev">
        
        <logger name="com.guli" level="INFO"/>
        
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="WARN_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
        root>
    springProfile>
    
    <springProfile name="pro">
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="DEBUG_FILE"/>
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
            <appender-ref ref="WARN_FILE"/>
        root>
    springProfile>
configuration>

注意:

(1)配置文件名不能随便改动,建议就用默认配置文件名称:“logback-spring.xml”

(2)项目里面可以正常使用@Slf4j注解

(3)整合的logback+slf4j日志,里面也会包括输出mybatis-plus的日志,因此就不能在boot项目的默认属性文件(application.properties)里面,再设置MP的日志输出,不然很可能会冲突

(4)springboot的spring-boot-starter-web依赖包含spring-boot-starte依赖,而spring-boot-starte依赖中包含spring-boot-starter-logging依赖。因此springboot不需要导入什么依赖,直接写一个logback-spring.xml配置文件就好了

(5)更多SpringBoot整合logback+slf4j日志,可以参考下文链接:
https://blog.csdn.net/white_ice/article/details/85065219

你可能感兴趣的:(总结,spring,log4j,logback,slf4j,spring,boot)