第三篇 SpringBoot整合log4j2詳解


源代碼: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.2.7.RELEASE 會失效,可能是版本不匹配,所以使用下面的版本同截圖
org.springframework.boot
spring-boot-starter-parent
2.2.4.RELEASE

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM