Log4j向logback遷移

1、項目中大多用的都是Log4j作的,而這次遷移到logback有以下理由:java

一、logback是log4j團隊新做,重寫了內部實現,在速度獲得提高的同時,佔用更少的內存;web

二、log4j與logback都是slf4j抽象層的實現,遷移工做量較小,也不存在兼容問題;spring

    注:在代碼中調用log對象,應該用slf4j提供的工廠類如:sql

    private static final Logger log = LoggerFactory.getLogger(xx.class);apache

    這樣寫的另一個好處,日誌框架發生變更時,也無需更改代碼。api

三、logback配置使用xml或者Groovy文件;服務器

四、熱部署。log4j默認不支持熱部署,須要在web.xml或者其餘配置文件中啓動log4j定時掃描配置文件的功能,以達到熱部署的目的。而logback無需單獨配置,默認開啓自動載入,無需啓用單獨的線程進行掃描。app

五、I/O錯誤恢復功能。當文件服務器宕機時,無需重啓應用服務器,日誌功能仍舊正常工做,當文件服務器恢復工做後,logback的appender會快速從上一個錯誤中恢復。框架

六、自動清除歷史日誌文件。log4j只能經過設置maxBackupIndex值固定日誌文件數量,而logback經過maxHistory值來刪除N天前的日誌。eclipse

七、自動壓縮歸檔日誌文件。RollingFileAppender能夠在回滾操做中,自動壓縮歸檔日誌文件。壓縮一般是異步執行的,因此即便是很大的日誌文件,你的應用都不會所以而被阻塞。

八、logback的謹慎模式。多個JVM能夠向同一個日誌文件輸出日誌,而log4j想實現這樣的功能較爲麻煩。

九、更精細的日誌過濾。log4j只能經過日誌級別進行過濾,而logback能夠在同級別日誌下經過表達式作更精確的過濾,這讓系統日誌分析問題定位更加的高效。

十、SiftingAppender是logback的一個追加器,經過SiftingAppender能夠根據條件將日誌篩選拆分。如按照會話輸出多個日誌文件。

2、logback配置

pom.xml

<!-- logback日誌 -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<scope>compile</scope>
</dependency>

<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
	<scope>runtime</scope>
</dependency>

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<property name="LOG_HOME" value="/Users/xubin/WorkSpaces/eclipseWorkSpace/logs" />
	
	<!-- 控制檯輸出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
		</encoder>
	</appender>
	
	<!-- 按照天天生成日誌文件 -->
	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${LOG_HOME}/applog.%d{yyyy-MM-dd}.log</FileNamePattern>
			<MaxHistory>30</MaxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
		</encoder>
		<!--日誌文件最大的大小 -->
<!-- 		<triggeringPolicy -->
<!-- 			class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> -->
<!-- 			<MaxFileSize>10MB</MaxFileSize> -->
<!-- 		</triggeringPolicy> -->
	</appender>
	
	<!--myibatis log configure -->
	<logger name="com.apache.ibatis" level="TRACE" />
	<logger name="java.sql.Connection" level="DEBUG" />
	<logger name="java.sql.Statement" level="DEBUG" />
	<logger name="java.sql.PreparedStatement" level="DEBUG" />

	<!-- 日誌輸出級別 -->
	<root level="INFO">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="FILE" />
	</root>
</configuration>

總結:這次遷移是講log4j遷移到logback,也是由於熱部署和日誌清理等需求促成這次遷移。

相關文章
相關標籤/搜索