天天看點

日志處理方案

環境:springboot

日志:logback

可以實作不同業務的日志在不同檔案裡存放

依賴

<!-- 日志子產品 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-logging</artifactId>
</dependency>
           

自定義配置

  • 在resources目錄下建立logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- logback 自定義配置
        适用于複雜場景下的日志生成
        參考:https://blog.csdn.net/Inke88/article/details/75007649
        -->
<configuration debug="false">

    <!-- 通過${}來調用變量 -->
    <property name="logback.logdir" value="/Users/spz/etc/log/shiroStudyDemo"/>

    <!-- 系統日志 - 輸出到檔案 -->
    <appender name="systemLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志名稱 -->
        <File>${logback.logdir}/system.log</File>
        <!--滾動政策,按照時間滾動 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--檔案路徑,定義了日志的切分方式——把每一天的日志歸檔到一個檔案中,以防止日志填滿整個磁盤空間-->
            <FileNamePattern>${logback.logdir}/system.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--隻保留最近90天的日志-->
            <maxHistory>90</maxHistory>
            <!--用來指定日志檔案的上限大小,那麼到了這個值,就會删除舊的日志-->
            <!--<totalSizeCap>1GB</totalSizeCap>-->
        </rollingPolicy>
        <!--日志輸出編碼格式化-->
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d [%thread] [%-5level] [%file-%line] - %msg%n</pattern>
        </encoder>

    </appender>

    <!-- 使用者記錄檔 - 輸出到檔案 -->
    <appender name="userLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志名稱 -->
        <File>${logback.logdir}/user.log</File>
        <!--滾動政策,按照時間滾動 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--檔案路徑,定義了日志的切分方式——把每一天的日志歸檔到一個檔案中,以防止日志填滿整個磁盤空間-->
            <FileNamePattern>${logback.logdir}/user.%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="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <!--展示格式 layout-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d [%thread] [%-5level] [%file-%line] - %msg%n</pattern>
        </layout>
    </appender>

    <!-- 不同日志輸出到不同檔案夾
            使用時,先建立:private final static Logger log = LoggerFactory.getLogger("SYSTEM_LOG");
            -->
    <logger name="SYSTEM_LOG" additivity="false" level="INFO">
        <appender-ref ref="systemLog"/>
    </logger>
    <logger name="USER_LOG" additivity="false" level="INFO">
        <appender-ref ref="userLog"/>
    </logger>
    <logger name="CONSOLE_LOG" additivity="false" level="INFO">
        <appender-ref ref="consoleLog"/>
    </logger>

    <root level="info">
        <appender-ref ref="systemLog" />
        <appender-ref ref="consoleLog" />
        <appender-ref ref="userLog" />
    </root>

</configuration>

           

使用

使用前需要建立執行個體

private final static Logger log = LoggerFactory.getLogger("SYSTEM_LOG");
           

然後直接使用

log.info("xxxx");
log.error("xxxx");
           

開發時和釋出時配置

開發時,可以将logback-spring.xml裡的

<logger name="SYSTEM_LOG" additivity="false" level="INFO">
        <appender-ref ref="systemLog"/>
    </logger>
    <logger name="USER_LOG" additivity="false" level="INFO">
        <appender-ref ref="userLog"/>
    </logger>
    <logger name="CONSOLE_LOG" additivity="false" level="INFO">
        <appender-ref ref="consoleLog"/>
    </logger>
           

配置為

<logger name="SYSTEM_LOG" additivity="false" level="INFO">
        <appender-ref ref="consoleLog"/>
    </logger>
    <logger name="USER_LOG" additivity="false" level="INFO">
        <appender-ref ref="consoleLog"/>
    </logger>
    <logger name="CONSOLE_LOG" additivity="false" level="INFO">
        <appender-ref ref="consoleLog"/>
    </logger>
           

這樣不需要改動代碼,所有日志都會輸出到控制台,便于開發。

而在釋出時,隻需要改回來即可,日志将輸出到檔案,非常友善。

結合lombok使用

lombok安裝辦法百度有,lombok有個注解@Slf4j(topic = "loggerName"),在類上加上這個注解,相當于這行代碼:

private final static Logger log = LoggerFactory.getLogger("loggerName");
           

也很友善