「初學者商城」- 添加日誌(新功能)

1. 前言


在衆多日誌框架中選擇了Log4j 2

主要就是用來記錄日誌,而且是有規則的,可配置的。


2. 源碼


完整項目地址:接口後臺部署

v1.1 標籤地址:接口後臺部署

v1.1 下載地址:接口 ziptar.gz。後臺 ziptar.gz。部署 ziptar.gz

注:對於標籤的說明「初學者商城」- 寫在最前面 #5.1


3. 接口


注:查看更改內容:添加日誌

3.1 .gitignore

### Others ###
.DS_Store
logs/
  • 提交代碼時排除生成的日誌目錄

3.2 osc-commons/pom.xml

        <!-- log4j2 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
  • 公用工程中加入了Log4j 2依賴

3.3 …base-core/…/log4j2.xml

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

<!-- 日誌級別以及優先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!-- monitorInterval="30":間隔秒數,自動檢測配置文件的變更和重新配置本身 -->
<configuration status="INFO" monitorInterval="30">

    <!-- 配置日誌輸出路徑 -->
    <properties>
        <!-- 日誌根目錄名稱 -->
        <property name="LOG_HOME">logs</property>
        <!-- 每個工程建一個對應的日誌目錄 -->
        <property name="SERVER_NAME">base-service</property>
    </properties>

    <!-- 定義輸出內容,輸出格式,輸出方式,日誌保存策略等,常用其下三種標籤:[console, File, RollingFile] -->
    <appenders>
        <!-- 控制檯輸出配置 -->
        <Console name="console" target="SYSTEM_OUT">
            <!-- 輸出格式 -->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %highlight{%-5p []} - %highlight{%logger{36}} - %m%n" />
        </Console>

        <!-- 錯誤日誌配置 -->
        <RollingFile name="rollingFileError"
                     fileName="${LOG_HOME}/${SERVER_NAME}/${SERVER_NAME}-error.log"
                     filePattern="${LOG_HOME}/${SERVER_NAME}-bak/${SERVER_NAME}-error.%d{yyyy-MM-dd}.%i.log">
            <!-- 輸出格式 -->
            <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level [%C{36}.%M] - %msg%n" />
            <Policies>
                <!-- 文件大小滾動策略 -->
                <SizeBasedTriggeringPolicy size="10MB" />
            </Policies>
            <Filters>
                <!-- 日誌級別 -->
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <DefaultRolloverStrategy>
                <!-- 刪除半年前的日誌-->
                <Delete basePath="${LOG_HOME}" maxDepth="2">
                    <IfFileName glob="*/*.log" />
                    <IfLastModified age="180d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <!--普通日誌配置 -->
        <RollingFile name="rollingFileInfoAndWarn"
                     fileName="${LOG_HOME}/${SERVER_NAME}/${SERVER_NAME}-info.log"
                     filePattern="${LOG_HOME}/${SERVER_NAME}-bak/${SERVER_NAME}-info.%d{yyyy-MM-dd}.%i.log">
            <!-- 輸出格式 -->
            <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level [%C{36}.%M:%L] - %msg%xEx%n" />
            <Policies>
                <!-- 文件大小滾動策略 -->
                <SizeBasedTriggeringPolicy size="10MB" />
            </Policies>
            <Filters>
                <!-- 日誌級別 -->
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" />
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
        </RollingFile>

        <!-- 所有日誌配置 -->
        <RollingRandomAccessFile name="allLog"
                                 fileName="${LOG_HOME}/${SERVER_NAME}/${SERVER_NAME}.log"
                                 filePattern="${LOG_HOME}/${SERVER_NAME}-bak/${SERVER_NAME}.%d{yyyyMMddHHmmss}.log">
            <!-- 輸出格式 -->
            <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss.SSS} [%thread] %level [%C{36}.%M:%L] - %msg%xEx%n" />
            <Policies>
                <!-- 文件大小滾動策略 -->
                <SizeBasedTriggeringPolicy size="10MB" />
            </Policies>
        </RollingRandomAccessFile>
    </appenders>

    <!-- 指定了具體的類和包的日誌級別 -->
    <loggers>
        <!-- 指定記錄日誌的級別,如指定爲 INFO,那麼只會記錄 INFO 以以上的級別日誌 -->
        <logger name="io.lettuce" level="INFO" />
        <logger name="io.netty" level="INFO" />
        <logger name="org.springframework" level="INFO"></logger>
        <logger name="org.mybatis" level="INFO"></logger>
        <logger name="org.mongodb" level="INFO" />
        <logger name="org.flywaydb" level="INFO" />
        <logger name="io.swagger" level="INFO" />
        <logger name="org.springframework.kafka" level="INFO" />
        <logger name="org.apache.kafka" level="ERROR" />
        <logger name="org.apache.ibatis" level="INFO" />
        <logger name="com.netflix" level="INFO" />
        <logger name="springfox" level="ERROR" />
        <logger name="org.springframework.web" level="INFO" />
        <logger name="org.springframework.web.servlet.handler" level="INFO" />
        <logger name="org.apache.http" level="INFO" />

        <!-- 根記錄器 -->
        <root level="DEBUG">
            <AppenderRef ref="console" />
            <AppenderRef ref="rollingFileError" />
            <AppenderRef ref="rollingFileInfoAndWarn" />
            <AppenderRef ref="allLog" />
        </root>
    </loggers>

</configuration>
  • 文件名通常爲log4j2.xml,放在resources根目錄中;文件名也可以是.json.jsn結尾
  • 首先配置了日誌輸出路徑
  • 其次定義輸出內容,輸出格式,輸出方式,日誌保存策略等
  • 最後指定了具體的類和包的日誌級別

3.4 …log-core/…/log4j2.xml

...省略部分...
    <!-- 配置日誌輸出路徑 -->
    <properties>
        <!-- 日誌根目錄名稱 -->
        <property name="LOG_HOME">logs</property>
        <!-- 每個工程建一個對應的日誌目錄 -->
        <property name="SERVER_NAME">log-service</property>
    </properties>
...省略部分...
  • 僅僅只是日誌輸出路徑中的父目錄名稱不一樣

3.5 其它

  1. 依賴上的排除
  2. 版本號的升級

4. 後臺


   注:標籤同步


5. 部署


注:查看更改內容:添加日誌

5.1 docker-compose.yaml

        volumes:
            - ./log/:/logs/
  • 對應接口中的配置,把日誌目錄映射出來

5.2 其它

        expose:
            - "8000"
  • 網關工程只暴露容器內端口,不映射到宿主機

6. 驗證


6.1 接口

  1. 下載v1.1標籤的代碼或者對照本篇博客更改v1.0標籤的代碼
  2. 項目啓動後,在項目根目錄中就會出現logs - base-service/log-service等目錄

6.2 後臺

   注:標籤同步

6.3 部署

  1. 下載v1.1標籤的代碼或者在v1.0標籤的代碼中添加和更改配置
  2. 項目部署後,在日誌目錄中就會出現base-service以及log-service目錄

7. 結語


加入日誌框架非常簡單,而且低耦合,很happy。阿,快樂。


希望能夠幫助到你

over




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章