源代碼:https://pan.baidu.com/s/1d1Lwv1gIvVNltIKVWeEseA
提取碼:wff0
SpringBoot整合Log4j2步驟:
1、刪除spring-boot-starter-parent默認使用spring-boot-starter-logging依賴
2、在pom.xml中增加spring-boot-starter-log4j2依賴
3、創建log4j2.xml文件即可
4、執行,指定目錄會生成相應的log文件
1:刪除spring-boot-starter-logging見下圖,打開pom.xml文件最終定位到spring-boot-dependencies文件,在此文件中將Logging依賴注釋掉即可
將spring-boot-starter-logging注釋后別忙着執行或debug會報錯:SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
將spring-boot-starter-log4j2依賴添加到pom.xml后就沒這個問題了
注意:下面version版本,
2:將下面依賴添加到pom.xml文件中
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
</dependencies>
3:在src.java.main.resources目錄下創建log4j2.xml文件 log4j2.xml文件內容如下:
<!--日志級別以及優先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--
自定義命名格式:
%d:發生時間,%d{yyyy-MM-dd HH:mm:ss,SSS},輸出類似:2020-02-20 22:10:28,921
%F:輸出所在的類文件名
%t:線程名稱
%p:日志級別
%c:日志消息所在類名
%m:消息內容
%M:輸出所在函數名
%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
%l:執行的函數名(類名稱:行號)com.core.LogHelper.aroundService(LogHelper.java:32)
%n:換行
%i:從1開始自增數字
%-5level:輸出日志級別,-5表示左對齊並且固定輸出5個字符,如果不足在右邊補0
“${sys:user.home}”是HOME目錄 如:C:\Users\heave, 此處指定任意目錄如:D:\logs
-->
<!--設置log4j2自身log級別為warn,每間隔30秒數自動檢測配置是否發生修改,並重新配置-->
<configuration status="warn" monitorInterval="30">
<Properties>
<!-- 日志顯示模板,顯示內容的格式如下 -->
<!-- [21:55:33:047] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Initializing Spring embedded WebApplicationContext -->
<Property name="log_pattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<!-- 保存日志文件目錄 -->
<!--<Property name="file_path" value="${sys:user.home}/logs"/>-->
<Property name="file_path" value="C:/logs"/>
<!-- 日志文件的最大容量,超過該值就進行備份 -->
<Property name="file_max_size" value="30MB"/>
<!-- 備份的文件夾名稱 如下為:2020-02 -->
<Property name="backup_folder" value="$${date:yyyy-MM}"/>
<!-- 備份文件的后綴,日志文件超過file_max_size會備份到filePattern指定的目錄下 -->
<Property name="backup_file_suffix" value="-%d{yyyy-MM-dd}-%i.log"/>
</Properties>
<!--定義appender-->
<appenders>
<!--控制台的輸出配置-->
<console name="Console" target="SYSTEM_OUT">
<!-- 設置控制台只輸出INFO及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) -->
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<!--輸出日志的格式-->
<PatternLayout pattern="${log_pattern}"/>
</console>
<!-- 所有的日志信息會打印到此文件中,append=false每次啟動程序會自動清空 -->
<!-- <File name="all" fileName="${file_path}/all.log" append="true">
<PatternLayout pattern="${log_pattern}"/>
</File>-->
<!--
該RollingFile存儲INFO級別的日志,
默認存儲到 fileName 文件中
超過SizeBasedTriggeringPolicy的設定值,則存儲到 filePattern 文件中
-->
<RollingFile name="RollingFileInfo" fileName="${file_path}/info.log"
filePattern="${file_path}/${backup_folder}/info${backup_file_suffix}">
<!--控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 寫入日志文件的模板 -->
<PatternLayout pattern="${log_pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="${file_max_size}"/>
</Policies>
<!-- DefaultRolloverStrategy屬性如不設置,則默認為最多同一文件夾下7個文件,超過該數量,會滾動刪除前面的記錄 -->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
<RollingFile name="RollingFileWarn" fileName="${file_path}/warn.log"
filePattern="${file_path}/${backup_folder}/warn${backup_file_suffix}">
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${log_pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="${file_max_size}"/>
</Policies>
</RollingFile>
<RollingFile name="RollingFileError" fileName="${file_path}/error.log"
filePattern="${file_path}/${backup_folder}/error${backup_file_suffix}">
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${log_pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="${file_max_size}"/>
</Policies>
</RollingFile>
</appenders>
<!-- 只有定義了logger並使用appender-ref,appender才會生效 -->
<loggers>
<!--過濾掉spring和hibernate的一些無用的debug信息-->
<logger name="org.springframework" level="INFO"/>
<logger name="org.mybatis" level="INFO">
<!-- 添加如下設置,控制台會再打印一次 -->
<AppenderRef ref="Console"/>
</logger>
<root level="INFO">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileWarn"/>
<appender-ref ref="RollingFileError"/>
</root>
</loggers>
</configuration>
項目目錄結構如下:
項目運行生成的文件如下:
問題:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/Program%20Files/apache-tomcat-7.0.107/webapps/ROOT/WEB-INF/lib/log4j-slf4j-impl-2.13.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/Program%20Files/apache-tomcat-7.0.107/webapps/ROOT/WEB-INF/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
解決:如下圖
按照上圖操作后重新編譯即可解決
更多log4j2配置參見官網: http://logging.apache.org/log4j/2.x/manual/appenders.html
源代碼:https://pan.baidu.com/s/1d1Lwv1gIvVNltIKVWeEseA
提取碼:wff0