1. 前言
在衆多日誌框架中選擇了Log4j 2
。
主要就是用來記錄日誌,而且是有規則的,可配置的。
2. 源碼
v1.1 下載地址:接口 zip,tar.gz。後臺 zip,tar.gz。部署 zip,tar.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 其它
- 依賴上的排除
- 版本號的升級
4. 後臺
注:標籤同步
5. 部署
注:查看更改內容:添加日誌
5.1 docker-compose.yaml
volumes:
- ./log/:/logs/
- 對應
接口
中的配置,把日誌目錄映射出來
5.2 其它
expose:
- "8000"
- 網關工程只暴露容器內端口,不映射到宿主機
6. 驗證
6.1 接口
- 下載
v1.1
標籤的代碼或者對照本篇博客更改v1.0
標籤的代碼 - 項目啓動後,在項目根目錄中就會出現
logs - base-service/log-service
等目錄
6.2 後臺
注:標籤同步
6.3 部署
- 下載
v1.1
標籤的代碼或者在v1.0
標籤的代碼中添加和更改配置 - 項目部署後,在日誌目錄中就會出現
base-service
以及log-service
目錄
7. 結語
加入日誌框架非常簡單,而且低耦合,很happy
。阿,快樂。
希望能夠幫助到你
over