由於批量更新的時候一直無法定位問題出處,就去服務器定位日志,奈何日志一直無法輸出,為了能夠更好的定位問題,痛定思痛后逐步排查最終解決問題。如有客官看到此處,請不要盲目對號入座,我的項目環境或許與你有區別所以解決方案不一定適合,此貼只作為工作記錄,並對出現相同問題,且項目環境相同的朋友作為借鑒而已,如沒有幫到,也請嘴下留情。
首先貼出日志文件:log4j2.yml
# 共有8個級別,按照從低到高為:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。 Configuration: status: info monitorInterval: 30 Properties: # 定義全局變量 Property: # 缺省配置(用於開發環境)。其他環境需要在VM參數中指定,如下: - Dlog.level.console=info - name: log.level.console value: debug - name: log.path value: /data/txv1.0/tx-data/logs - name: project.name value: tx_data - name: log.pattern value: "%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %-30.30C{1.} : %m%n" Appenders: Console: #輸出到控制台 name: CONSOLE target: SYSTEM_OUT PatternLayout: pattern: ${log.pattern} # 啟動日志 RollingFile: - name: ROLLING_FILE fileName: ${log.path}/${project.name}.log filePattern: "${log.path}/historyRunLog/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz" PatternLayout: pattern: ${log.pattern} Filters: # 一定要先去除不接受的日志級別,然后獲取需要接受的日志級別 ThresholdFilter: - level: fatal onMatch: DENY onMismatch: NEUTRAL - level: debug onMatch: ACCEPT onMismatch: DENY Policies: TimeBasedTriggeringPolicy: # 按天分類 modulate: true interval: 1 DefaultRolloverStrategy: # 文件最多100個 max: 100 # 平台日志 - name: PLATFORM_ROLLING_FILE ignoreExceptions: false fileName: ${log.path}/platform/${project.name}_platform.log filePattern: "${log.path}/platform/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz" PatternLayout: pattern: ${log.pattern} Policies: TimeBasedTriggeringPolicy: # 按天分類 modulate: true interval: 1 DefaultRolloverStrategy: # 文件最多100個 max: 100 # 業務日志 - name: BUSSINESS_ROLLING_FILE ignoreExceptions: false fileName: ${log.path}/bussiness/${project.name}_bussiness.log filePattern: "${log.path}/bussiness/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz" PatternLayout: pattern: ${log.pattern} Policies: TimeBasedTriggeringPolicy: # 按天分類 modulate: true interval: 1 DefaultRolloverStrategy: # 文件最多100個 max: 100 # 錯誤日志 - name: EXCEPTION_ROLLING_FILE ignoreExceptions: false fileName: ${log.path}/exception/${project.name}_exception.log filePattern: "${log.path}/exception/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz" ThresholdFilter: level: error onMatch: ACCEPT onMismatch: DENY PatternLayout: pattern: ${log.pattern} Policies: TimeBasedTriggeringPolicy: # 按天分類 modulate: true interval: 1 DefaultRolloverStrategy: # 文件最多100個 max: 100 # DB 日志 - name: DB_ROLLING_FILE ignoreExceptions: false fileName: ${log.path}/db/${project.name}_db.log filePattern: "${log.path}/db/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz" PatternLayout: pattern: ${log.pattern} Policies: TimeBasedTriggeringPolicy: # 按天分類 modulate: true interval: 1 DefaultRolloverStrategy: # 文件最多100個 max: 100 Loggers: Root: level: debug AppenderRef: - ref: CONSOLE - ref: ROLLING_FILE - ref: PLATFORM_ROLLING_FILE - ref: BUSSINESS_ROLLING_FILE - ref: EXCEPTION_ROLLING_FILE - ref: DB_ROLLING_FILE Logger: - name: rolling level: info additivity: true AppenderRef: - ref: CONSOLE - ref: ROLLING_FILE - name: platform level: debug additivity: true AppenderRef: - ref: CONSOLE - ref: PLATFORM_ROLLING_FILE - name: bussiness level: info additivity: true AppenderRef: - ref: CONSOLE - ref: BUSSINESS_ROLLING_FILE - name: exception level: debug additivity: true AppenderRef: - ref: CONSOLE - ref: EXCEPTION_ROLLING_FILE - name: db level: debug additivity: true AppenderRef: - ref: CONSOLE - ref: DB_ROLLING_FILE
申明:此文件格式借鑒與網上一位忘記叫什么的朋友的,如有雷同請諒解或許我就是借鑒你的。
貼出原始依賴pom文件(部分,跟日志相關的)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<!-- 排除自帶的日志依賴 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 配置 log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
..........
<!-- 雲服務依賴包 start -->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>${qiniu-version}</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun-oss-version}</version>
</dependency>
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>${qcloud-cos-version}</version>
</dependency>
<!-- 雲服務依賴包 end -->
</dependencies>
由於啟動之后再服務器中一直存在這樣一種警告
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/data/txv1.0/tx-data/webapps/tx-data/WEB-INF/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/data/txv1.0/tx-data/webapps/tx-data/WEB-INF/lib/log4j-slf4j-impl-2.11.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
經過多次排查發現這個警告是提示slf4j-log4j12-xxx.jar 的依賴沖突
然后通過pom文件排查是否存在logger相關slf4j-log4j12-xxx.jar包的沖突,如圖
上圖是我去掉依賴沖突所以看不見相關依賴包,如果存在依賴的就會顯示被那些jar所依賴,最終發現依賴的jar包
<dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>${qiniu-version}</version> </dependency>
最后去掉這個包所依賴的slf4j-log4j12-xxx.jar包,就解決了如法輸出日志信息的問題。
<dependency> <groupId>com.qcloud</groupId> <artifactId>cos_api</artifactId> <version>${qcloud-cos-version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>