美文网首页
spring boot logback配置说明(易懂)

spring boot logback配置说明(易懂)

作者: 搬砖中年人 | 来源:发表于2019-04-06 20:32 被阅读0次

    前面看了网上的一些记录片段记录都不太完整也不友好,板砖过来简单修改注释和移除一些不必要的东西(如:彩色字体,有毛用!)
    springboot2.x 已经给我们包含了logging包内继承了需要的log包,都是最合适的版本,不需要自己maven导入。

    开始:

    resources目录创建 logback-spring.xml 必须是这个 不然spring 不认.
    你也可以自定义,修改入口配置logging.config=你的xml

    logback-spring.xml内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="true">
        <!-- 项目名称 -->
        <property name="PROJECT_NAME" value="springBootDemoFull"/>
    
        <!--定义日志文件的存储地址后面拦截器用到,禁止使用相对路径-->
        <property name="LOG_HOME" value="/logs"/>
    
        <!-- 控制台输出 -->
        <!--appender的name属性随意命名-->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!-- 系统信息日志文件 appender -->
        <appender name="SYSTEM_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--过滤器,拦截INFO级别日志 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <!--记录信息后退出,防止其他appender的filter继续拦截日志记录-->
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.info.%d{yyyyMMdd}.%i.log</FileNamePattern>
                <!--日志文件保留天数-->
                <MaxHistory>15</MaxHistory>
                <!--日志文件最大的大小-->
                <MaxFileSize>10MB</MaxFileSize>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!-- 系统错误日志文件 appender-->
        <appender name="SYSTEM_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--过滤器,拦截ERROR级别日志 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <!--记录信息后退出,防止其他appender的filter继续拦截日志记录-->
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!--日志文件输出的文件名,如果按小时分割加入HH就行-->
                <FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.error.%d{yyyyMMdd}.%i.log</FileNamePattern>
                <!--日志文件保留天数-->
                <MaxHistory>15</MaxHistory>
                <!--日志文件最大的大小-->
                <MaxFileSize>10MB</MaxFileSize>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!-- 自定义日志 -->
        <appender name="OTHER" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 过滤器,只打印INFO级别的日志 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.other.%d{yyyyMMdd}.%i.log</FileNamePattern>
                <!--日志文件保留天数-->
                <MaxHistory>15</MaxHistory>
                <!--日志文件最大的大小-->
                <MaxFileSize>10MB</MaxFileSize>
            </rollingPolicy>
    
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
        <!--自定义日志加入一个别名other 引用的 appender 为 OTHER我们上面的appender的name属性的value值 也就是说 在项目中 直接 getLogger("other") 即可-->
        <logger name="other" additivity="true">
            <appender-ref ref="OTHER"/>
        </logger>
    
        <!-- 来发环境下的appender注册 -->
        <!--springProfile属性为 application.properties中spring.profiles.active属性的值 : dev 或 prod -->
        <springProfile name="dev">
            <!--将appender'加入的springboot中 必须使用root节点注册 appender 如果appender没有指定日志级别将使用root的默认level属性级别-->
            <root level="INFO">
                <appender-ref ref="CONSOLE"/>
                <appender-ref ref="SYSTEM_INFO"/>
                <appender-ref ref="SYSTEM_ERROR"/>
            </root>
        </springProfile>
    
        <!-- 生产环境下的appender注册 -->
        <springProfile name="prod">
            <root level="INFO">
                <appender-ref ref="SYSTEM_INFO"/>
                <appender-ref ref="SYSTEM_ERROR"/>
            </root>
        </springProfile>
    
    </configuration>
    

    入口配置文件 application.properties 配置
    这里提醒一下引入其他配置文件必须使用spring.profiles.include 统一规范,为什么请看配置注释

    spring.application.name=springboot-demo-full
    # 多个配置文件中有同一个值,以下情况获取值的效果:
    # 1.启动命令不带--spring.profiles.active参数以application.properties首先启动
    #  按顺序所有文件第一个配置的spring.profiles.active属性中指定的最后一个文件中含有该属性的值为准
    #  如果所有文件都没有spring.profiles.active,
    #  那么以pring.profiles.include配置的最后一个属性文件中的值为准
    # 2.启动命令带--spring.profiles.active参数以参数指定的属性文件首先启动
    #  此情况,以命令指定的配置文件中的值为准,其他文件中再配置spring.profiles.active也不会生效,如果不存在值,那么会以pring.profiles.include指定的最后一个文件中的值为准
    
    ##简要说
    #  启动命令 java -jar name.jar --spring.profiles.active指定文件中的值优先级高于
    #  文件中spring.profiles.active指定的文件列表中最后一次出现的值 > 文件中spring.profiles.include指定的文件列表中最后一次出现的值
    # 总结说明:建议所有引入配置的时候避免用相同的配置属性 或 都使用 spring.profiles.include 覆盖前面的值,如果出现问题,查找问题也有规律可循。
    spring.profiles.include=druid,mybatis
    # 生产环境修改为prod
    spring.profiles.active=dev 
    

    代码中使用的时候切记别导错了包,包为:
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    1.走INFO 和ERROR的拦截器 
     Logger logger = LoggerFactory.getLogger(xxxx.class);
     logger.info(msg);
     logger.error(msg);
    2.走自定义拦截器的
     Logger logger = LoggerFactory.getLogger("other");
     logger.info(msg);
    

    相关文章

      网友评论

          本文标题:spring boot logback配置说明(易懂)

          本文链接:https://www.haomeiwen.com/subject/sckdiqtx.html