美文网首页
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