springboot集成logback配置文件模板

定义logback的配置文件为 logback-spring.xml就可以使用spring的一些特性

前期准备

  1. 保证日志只有一个实现类logback
  2. springboot默认日志门面是lsf4j,默认的日志实现类是logback
  3. springboot配置文件application.yaml中需要指定spring.profiles.active=dev

模板

<?xml version="1.0" encoding="UTF-8"?>

<!--    scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
        scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
        debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
————————————————
版权声明:本文为CSDN博主「Inke」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/inke88/article/details/75007649 -->
<configuration scan="false" scanPeriod="60 seconds" debug="false">

    <!--    <property name="logdir" value="/home/admin/website/application/logs/inav" />-->
    <!--    <property name="appname" value="inav" />-->
    <!--    用来定义变量值的标签, 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。-->
    <!--application.yml 传递参数,不能使用logback 自带的<property>标签 -->
    <!--        在application.properties配置的spring.application.name=ssx-springboot-mysql-curd-->
    <springProperty scope="context" name="appname" source="spring.application.name"/>
    <!--              在application.properties配置的spring.application.logdir=/home/shenshuxin/log/java-app/${spring.application.name} -->
    <springProperty scope="context" name="logdir" source="spring.application.logdir"/>
    <springProperty scope="context" name="serverport" source="server.port"/>



    <!-- 测试环境+开发环境. 多个使用逗号隔开. -->
    <springProfile name="test,dev">

        <!--    每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称,一般来说我们不用这个属性,可有可无。-->
        <contextName>${appname}</contextName>

        <!--输出到控制台 ConsoleAppender-->
        <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
            <!--展示格式 layout-->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>
<!--                <pattern>    %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern>-->
                    %d{yyyy-MM-dd HH:mm:ss} [%thread] %magenta(%-5level) %green([%-35.35class]) >>> %cyan(%msg) %n
                </pattern>
            </layout>
        </appender>


        <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高,
        所以我们使用下面的策略,可以避免输出 Error 的日志-->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!--过滤 Error-->
                <level>ERROR</level>
                <!--匹配到就禁止-->
                <onMatch>DENY</onMatch>
                <!--没有匹配到就允许-->
                <onMismatch>ACCEPT</onMismatch>
            </filter>
            <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
            如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
            的日志改名为今天的日期。即,<File> 的日志都是当天的。
        -->
            <File>${logdir}/info.${appname}.${serverport}.log</File>
            <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
                <FileNamePattern>${logdir}/info.${appname}.${serverport}.%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--只保留最近90天的日志-->
                <maxHistory>90</maxHistory>
                <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
                <totalSizeCap>1GB</totalSizeCap>
            </rollingPolicy>
            <!--日志输出编码格式化-->
            <encoder>
                <charset>UTF-8</charset>
                <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
            </encoder>
        </appender>


        <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>Error</level>
            </filter>
            <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
            如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
            的日志改名为今天的日期。即,<File> 的日志都是当天的。
        -->
            <File>${logdir}/error.${appname}.${serverport}.log</File>
            <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
                <FileNamePattern>${logdir}/error.${appname}.${serverport}.%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--只保留最近90天的日志-->
                <maxHistory>90</maxHistory>
                <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
                <totalSizeCap>1GB</totalSizeCap>
            </rollingPolicy>
            <!--日志输出编码格式化-->
            <encoder>
                <charset>UTF-8</charset>
                <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
            </encoder>
        </appender>


        <appender name="fileUserLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--   配置我们自己写的包的日志信息,目的是为了方便查看自己的类日志,此日志文件只有我们自己的的log         -->
            <File>${logdir}/user.${appname}.${serverport}.log</File>
            <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
                <FileNamePattern>${logdir}/user.${appname}.${serverport}.%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--只保留最近90天的日志-->
                <maxHistory>90</maxHistory>
                <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
                <totalSizeCap>1GB</totalSizeCap>
            </rollingPolicy>
            <!--日志输出编码格式化-->
            <encoder>
                <charset>UTF-8</charset>
                <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
            </encoder>
        </appender>


        <!-- logger标签可以有多个 配置某个包的日志
         设置level,打印级别 debug
         设置additivity,默认为true,logger的打印信息向上级传递; 如果为true则会继承root的配置
         设置appender-ref,配置此logger日志输出到哪个appender。
        -->
        <logger name="ssx.demo" level="debug" additivity="false">
            <appender-ref ref="consoleLog"/>
            <appender-ref ref="fileInfoLog"/>
            <appender-ref ref="fileErrorLog"/>
            <appender-ref ref="fileUserLog"/>
        </logger>

        <!--    root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。
            level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。
            默认是DEBUG。
            可以包含零个或多个元素,标识这个appender将会添加到这个logger。如果自定义的 <appender标签没有出现在root里,那么此 <appender是不生效的,除非在<logger标签里指定
    -->
        <root level="debug">
            <!--appender将会添加到这个logger-->
            <!--        生产环境控制台日志一般我们不输出-->
            <appender-ref ref="consoleLog"/>
            <appender-ref ref="fileInfoLog"/>
            <appender-ref ref="fileErrorLog"/>
        </root>
    </springProfile>


    <!--    生产环境-->
    <springProfile name="prod">

        <!--    每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称,一般来说我们不用这个属性,可有可无。-->
        <contextName>${appname}</contextName>

        <!--输出到控制台 ConsoleAppender-->
        <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
            <!--展示格式 layout-->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>
                    <!--                <pattern>    %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern>-->
                    %d{yyyy-MM-dd HH:mm:ss} [%thread] %magenta(%-5level) %green([%-35.35class]) >>> %cyan(%msg) %n
                </pattern>
            </layout>
        </appender>


        <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高,
        所以我们使用下面的策略,可以避免输出 Error 的日志-->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!--过滤 Error-->
                <level>ERROR</level>
                <!--匹配到就禁止-->
                <onMatch>DENY</onMatch>
                <!--没有匹配到就允许-->
                <onMismatch>ACCEPT</onMismatch>
            </filter>
            <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
            如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
            的日志改名为今天的日期。即,<File> 的日志都是当天的。
        -->
            <File>${logdir}/info.${appname}.${serverport}.log</File>
            <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
                <FileNamePattern>${logdir}/info.${appname}.${serverport}.%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--只保留最近90天的日志-->
                <maxHistory>90</maxHistory>
                <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
                <totalSizeCap>1GB</totalSizeCap>
            </rollingPolicy>
            <!--日志输出编码格式化-->
            <encoder>
                <charset>UTF-8</charset>
                <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
            </encoder>
        </appender>


        <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>Error</level>
            </filter>
            <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
            如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
            的日志改名为今天的日期。即,<File> 的日志都是当天的。
        -->
            <File>${logdir}/error.${appname}.${serverport}.log</File>
            <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
                <FileNamePattern>${logdir}/error.${appname}.${serverport}.%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--只保留最近90天的日志-->
                <maxHistory>90</maxHistory>
                <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
                <totalSizeCap>1GB</totalSizeCap>
            </rollingPolicy>
            <!--日志输出编码格式化-->
            <encoder>
                <charset>UTF-8</charset>
                <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
            </encoder>
        </appender>


        <appender name="fileUserLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--   配置我们自己写的包的日志信息,目的是为了方便查看自己的类日志,此日志文件只有我们自己的的log         -->
            <File>${logdir}/user.${appname}.${serverport}.log</File>
            <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
                <FileNamePattern>${logdir}/user.${appname}.${serverport}.%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--只保留最近90天的日志-->
                <maxHistory>90</maxHistory>
                <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
                <totalSizeCap>1GB</totalSizeCap>
            </rollingPolicy>
            <!--日志输出编码格式化-->
            <encoder>
                <charset>UTF-8</charset>
                <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
            </encoder>
        </appender>


        <!-- logger标签可以有多个 配置某个包的日志
         设置level,打印级别 debug
         设置additivity,默认为true,logger的打印信息向上级传递; 如果为true则会继承root的配置
         设置appender-ref,配置此logger日志输出到哪个appender。
        -->
        <logger name="ssx.demo" level="debug" additivity="false">
<!--            <appender-ref ref="consoleLog"/>-->
            <appender-ref ref="fileInfoLog"/>
            <appender-ref ref="fileErrorLog"/>
            <appender-ref ref="fileUserLog"/>
        </logger>

        <!--    root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。
            level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。
            默认是DEBUG。
            可以包含零个或多个元素,标识这个appender将会添加到这个logger。如果自定义的 <appender标签没有出现在root里,那么此 <appender是不生效的,除非在<logger标签里指定
    -->
        <root level="debug">
            <!--appender将会添加到这个logger-->
            <!--        生产环境控制台日志一般我们不输出-->
<!--            <appender-ref ref="consoleLog"/>-->
            <appender-ref ref="fileInfoLog"/>
            <appender-ref ref="fileErrorLog"/>
        </root>
    </springProfile>
</configuration>


注意网上很多文章的配置 additivity配置拼错了,导致日志打印输出了两次

<logger name="ssx.demo.springbootmysqlcurd" level="debug" additivity="false">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值