Maven依赖

        <!-- Logback 此依赖直接包括了 logback-core 与 slf4j-api的依赖 同时版本越高,支持的功能越多-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.9</version>
        </dependency>

在resources下添加配置文件 logback.xml 不过有人建议更名为 logback-spring.xml,我也建议更名为 logback-spring.xml

使用前务必在配置文件加入 application.properties中存在 spring.application.name

<?xml version="1.0" encoding="UTF-8"?>
<!-- scan 配置文件如果变更,配置文件将重新加载,默认:true-->
<!-- scanPeriod 配置自动检测文件变更的时间,需要给出时间单位,如果没有给出时间单位,则以毫秒为准。当sacn为true时,scanPeriod才会生效,默认:1分钟-->
<!-- debug 控制台打印logback所有日志信息(防止开发期间,获取日志不用再去输出的文件里查询了),生产环境以需要关闭-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!-- SpringProperty 因为property获取不到配置文件的值,使用springProperty来获取application配置文件的值 -->
    <!-- 特别说明:当使用springProperty的时候,配置文件名字一定要设置为logback-spring,不然会报错。
    因为项目的配置文件加载顺序是:logback.xml -> application.properties -> logback-spring.xml
    虽然配置了defaultValue 他似乎没用!-->
    <springProperty scope="context" name="log.appname" source="spring.application.name" defaultValue="springBoot"/>

    <!-- 用于区分不同的jar包的日志 更高级的请查看 springProperty解释-->
    <contextName>${log.appname}</contextName>

    <!-- 自定义 日志存放路径。(设置完后,后面可使用${log.path} 来获取value)-->
    <property name="log.path" value="./logs"/>

    <!-- 自定义 日志输出格式 (设置完后,后面可使用${log.pattern} 来获取value)-->
    <property name="log.pattern"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{30} - [%method,%line] - %msg%n"/>

    <!-- 配置输出位置:控制台:ConsoleAppender -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder:定义控制台输出的日志格式 (这里引用了之前定义的log.pattern)-->
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!-- 配置输出位置:系统日志输出 RollingFileAppender -->
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 定义日志文件输出路径 (引用上文定义的 log.path) -->
        <file>${log.path}/${log.appname}-info.log</file>
        <!-- 配置日志滚动政策:基于时间创建日志文件 TimeBasedRollingPolicy -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 配置日志滚动政策的文件名格式 -->
            <fileNamePattern>${log.path}/${log.appname}-info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 配置:日志滚动周期90天 似乎国家要求保留操作日志90天+-->
            <maxHistory>90</maxHistory>
            <!-- 配置:日志大小20GB -->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <!-- 不太清楚 大意是指定了单个文件最大10MB -->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>10MB</maxFileSize>
        </triggeringPolicy>
        <!-- 指定日志的输出格式 (引用上文定义log.pattern)-->
        <encoder>
            <pattern>${log.pattern}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 配置日志的过滤级别 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 日志级别 Error的配置 可在filter 对比区别 -->
    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/${log.appname}-error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 需要修改自己的项目名 -->
            <fileNamePattern>${log.path}/${log.appname}-error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 60天 -->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 用户访问日志输出  -->
    <appender name="redenvelop-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/${log.appname}-user.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天回滚 daily -->
            <fileNamePattern>${log.path}/${log.appname}-user.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 60天 -->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>


    <!-- 系统模块日志级别控制  -->
    <logger name="com.xl" level="info"/>
    <!-- Spring日志级别控制  -->
    <logger name="org.springframework" level="warn"/>

    <root level="info">
        <appender-ref ref="console"/>
    </root>

    <!-- 系统操作日志 -->
    <root level="info">
        <appender-ref ref="file_info"/>
        <appender-ref ref="file_error"/>
    </root>

    <!-- 系统用户操作日志 需要指定 name-->
    <logger name="redenvelop-user" level="info">
        <appender-ref ref="redenvelop-user"/>
    </logger>

</configuration> 

特别说明:项目运行的时候 nohup日志会特别大。nohup代表的是控制台日志。一旦项目重启,控制台日志文件会被覆盖掉,XXX-info.log 或 XXX-error.log 则不会被覆盖!

特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤