什么是日志门面? SpringBoot整合log4j2 ,日志落地

文章目录

  • 什么是日志门面?
  • SpringBoot默认的日志门面和日志框架
    • SLF4J
    • logback
  • 推荐使用log4j2而不是logback
    • Log4j2
    • SpringBoot整合log4j2
      • 1.依赖修改
      • 2.配置文件 log4j2-spring.xml

什么是日志门面?

市面上的日志框架:JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j 等等

日志门面就是在日志框架和应用程序之间架设一个沟通的桥梁,对于应用程序来说,无论底层的日志框架如何变,都不需要有任何感知

日志门面可以理解为java中的一个interface(接口),而日志框架就是就是实现类
什么是日志门面? SpringBoot整合log4j2 ,日志落地_第1张图片

SpringBoot默认的日志门面和日志框架

下图是springboot默认的日志框架 ,slf4j作为日志门面,而logback作为日志框架的实现
什么是日志门面? SpringBoot整合log4j2 ,日志落地_第2张图片

SLF4J

Java 的简单日志记录外观 (SLF4J) 用作各种日志记录框架(如 java.util.logging、logback 和 reload4j)的简单外观或抽象。SLF4J 允许最终用户在部署时插入所需的日志记录框架。请注意,启用 SLF4J 库/应用程序意味着仅添加一个强制依赖项,即 slf4j-api-1.7.36.jar。

logback

什么是日志门面? SpringBoot整合log4j2 ,日志落地_第3张图片
在springboot中如果要使用自己的配置直接在resources创建配置文件就可以了
在这里插入图片描述


<configuration>
    
    
    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d %p (%file:%line\)- %m%npattern>
            
            <charset>UTF-8charset>
        encoder>
    appender>
    
    
    
    <appender name="log-info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>log/info.logFile>
        
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            
            <fileNamePattern>log/info.%d.%i.logfileNamePattern>
            
            <maxHistory>30maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy  class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                
                <maxFileSize>2MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
        rollingPolicy>
        <encoder>
            
            <pattern>
                %d %p (%file:%line\)- %m%n
            pattern>
            
            <charset>UTF-8charset>
        encoder>
    appender>

    
    <appender name="error-info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>log/error.logFile>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERRORlevel> 
        filter>
        
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            
            <fileNamePattern>log/error.%d.%i.logfileNamePattern>
            
            <maxHistory>30maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy  class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                
                <maxFileSize>2MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
        rollingPolicy>
        <encoder>
            
            <pattern>
                %d %p (%file:%line\)- %m%n
            pattern>
            
            <charset>UTF-8charset>
        encoder>
    appender>

    
    <root level="info">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="error-info"/>
        <appender-ref ref="log-info" />
    root>
    
    
    

    <logger name="top.fate" level="info" >
        <appender-ref ref="log-info" />
    logger>
configuration>

application.properties

#==================== 日志配合·标准  ============================
logging.config=classpath:logback.xml

推荐使用log4j2而不是logback

Log4j2

Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题。

现在最优秀的Java日志框架是Log4j2,没有之一。根据官方的测试表明,在多线程环境下,Log4j2的异步日志表现更加优秀。在异步日志中,Log4j2使用独立的线程去执行I/O操作,可以极大地提升应用程序的性能。
什么是日志门面? SpringBoot整合log4j2 ,日志落地_第4张图片

SpringBoot整合log4j2

1.依赖修改

  • pom
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
    
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-loggingartifactId>
            <groupId>org.springframework.bootgroupId>
        exclusion>
    exclusions>
dependency>

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

什么是日志门面? SpringBoot整合log4j2 ,日志落地_第5张图片

2.配置文件 log4j2-spring.xml




<configuration monitorInterval="5">
    

    
    <Properties>
        
        <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level}[%thread] %style{%logger{36}}{cyan} : %msg%n" />

        
        <property name="FILE_PATH" value="./logs" />
        <property name="FILE_NAME" value="ysdd-example-spring-boot" />
    Properties>

    <appenders>
        <console name="Console" target="SYSTEM_OUT">
            
            <PatternLayout pattern="${LOG_PATTERN}" disableAnsi="false" noConsoleNoAnsi="false"/>
            
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
        console>

        
        <RollingFile name="RollingFileInfo"
                     fileName="${FILE_PATH}/info.log"
                     filePattern="${FILE_PATH}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-INFO_%i.log.gz">
            
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="20MB"/>
            Policies>
            
            <DefaultRolloverStrategy max="15"/>
        RollingFile>

        
        <RollingFile name="RollingFileWarn"
                     fileName="${FILE_PATH}/warn.log"
                     filePattern="${FILE_PATH}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-WARN_%i.log.gz">
            
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="20MB"/>
            Policies>
            
            <DefaultRolloverStrategy max="15"/>
        RollingFile>

        
        <RollingFile name="RollingFileError"
                     fileName="${FILE_PATH}/error.log"
                     filePattern="${FILE_PATH}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-ERROR_%i.log.gz">
            
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="20MB"/>
            Policies>
            
            <DefaultRolloverStrategy max="15"/>
        RollingFile>
    appenders>

    
    
    <loggers>
        
        <logger name="org.mybatis" level="info" additivity="false">
            <AppenderRef ref="Console"/>
        logger>
        
        
        <Logger name="top.fate" level="info" additivity="false">
            <AppenderRef ref="Console"/>
        Logger>

        <root level="info">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/>
        root>
    loggers>
configuration>

application.properties

logging.level.root=error
日志框架已经生效,同时本地

什么是日志门面? SpringBoot整合log4j2 ,日志落地_第6张图片

你可能感兴趣的:(SpringBoot,java,spring,boot,intellij-idea,maven)