1. 程式人生 > >logback與Spring、SpringMVC結合使用教程

logback與Spring、SpringMVC結合使用教程

        摘要:本文主要介紹瞭如何在spring、springMVC中使用logback

一、logback與Spirng結合使用

1、maven新增引用:

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.1.2</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
			<version>1.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.logback-extensions</groupId>
			<artifactId>logback-ext-spring</artifactId>
			<version>0.1.1</version>
		</dependency>


其中logback-ext-spring這個jar包是為了和spring一起使用的。

2、src/main/resource新增logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- 儘量別用絕對路徑,如果帶引數不同容器路徑解釋可能不同,以下配置引數在pom.xml裡 -->
	<property name="log.root.level" value="${log.root.level}" /> <!-- 日誌級別 -->
	<property name="log.other.level" value="${log.other.level}" /> <!-- 其他日誌級別 -->
	<property name="log.base" value="${log.base}" /> <!-- 日誌路徑,這裡是相對路徑,web專案eclipse下會輸出到eclipse的安裝目錄下,如果部署到linux上的tomcat下,會輸出到tomcat/bin目錄 下 -->
	<property name="log.moduleName" value="${log.moduleName}" />  <!-- 模組名稱, 影響日誌配置名,日誌檔名 -->
	<property name="log.max.size" value="100MB" /> <!-- 日誌檔案大小 -->

	<!--控制檯輸出 -->
	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method\(\):%L -%msg%n</Pattern>
		</encoder>
	</appender>

  <!-- 日誌檔案輸出 -->
	<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${log.base}/${log.moduleName}.log</File><!-- 設定日誌不超過${log.max.size}時的儲存路徑,注意如果 是web專案會儲存到Tomcat的bin目錄 下 -->
		<!-- 滾動記錄檔案,先將日誌記錄到指定檔案,當符合某個條件時,將日誌記錄到其他檔案。-->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}/archive/${log.moduleName}_all_%d{yyyy-MM-dd}.%i.log.zip
			</FileNamePattern>
			<!-- 當天的日誌大小 超過${log.max.size}時,壓縮日誌並儲存 -->
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>${log.max.size}</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<!-- 日誌輸出的檔案的格式  -->
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method\(\):%L -%msg%n</pattern>
		</layout>
	</appender>
 
	<!-- 為某個包下的所有類的指定Appender 這裡也可以指定類名稱例如:com.aa.bb.ClassName -->
	<logger name="com.lin" additivity="false">
		<level value="debug" />
		<appender-ref ref="stdout" />
		<appender-ref ref="file" />
	</logger>
	<!-- root將級別為“DEBUG”及大於“DEBUG”的日誌資訊交給已經配置好的名為“Console”的appender處理,“Console”appender將資訊列印到Console -->
	<root level="debug">
		<appender-ref ref="stdout" /> <!-- 標識這個appender將會新增到這個logger -->
		<appender-ref ref="file" />
	</root>
</configuration>

其中,下面這幾個引數 是在pom.xml裡配置的,如果你不想在pom.xml裡來配置,也可以直接寫死就是

<property name="log.root.level" value="${log.root.level}" /> 
<property name="log.other.level" value="${log.other.level}" /> 
<property name="log.base" value="${log.base}" /> 
<property name="log.moduleName" value="${log.moduleName}" />  
<property name="log.max.size" value="10kb" />

引數內容如下:

<profiles>
		<!-- 開發環境 -->
		<profile>
			<id>dev</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<!-- 以下配置properties中用到一些變數,如資料庫連線引數、日誌列印等 -->
			<properties>
				<!-- DB Resource -->
				<jdbc_driverClassName>com.mysql.jdbc.Driver</jdbc_driverClassName>
				<jdbc_url>jdbc:mysql://localhost:3306/learning</jdbc_url>
				<jdbc_username>root</jdbc_username>
				<jdbc_password>[email protected]</jdbc_password>

				<log.moduleName>ssm-project</log.moduleName>
				<log.base>logs</log.base>
				<log.other.level>DEBUG</log.other.level>
				<log.root.level>DEBUG</log.root.level>
				<log.stdout.ref><![CDATA[<appender-ref ref="stdout" />]]></log.stdout.ref>
			</properties>
		</profile>
	</profiles>

3、如果單獨的跑一個spring專案,不帶web頁面的話,那麼這時跑個單元測試就可以列印日誌了

看看輸出的檔案:

二、logback與spingMVC結合使用

其實與spingMVC只需要在上面的工程中,在web.xml裡新增如下內容即可。

    <!-- 新增日誌監聽器 -->
	<context-param>
		<param-name>logbackConfigLocation</param-name>
		<param-value>classpath:logback.xml</param-value>
	</context-param>
	<listener>
		<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
	</listener>

然後本地啟動tomcat,把專案載入進來,注意,此時的日誌輸出路徑 不會像上面一樣出現在工程所在路徑的logs目錄下,而會放在eclipse安裝目錄下,自動新建一個logs目錄 下:

而如果將此war包上傳到linux下的tomcat的webapp目錄後,日誌檔案會儲存在tomcat/bin/logs目錄下,記得,這個是web專案和非web專案日誌儲存路徑的不同!

下面這一個是配置比較複雜的,大的工程更多的是以這種方式來配置的,針對不同的包,不同級別的日誌來分別列印,如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- 儘量別用絕對路徑,如果帶引數不同容器路徑解釋可能不同,以下配置引數在pom.xml裡 -->
	<property name="log.root.level" value="${log.root.level}" /> <!-- 日誌級別 -->
	<property name="log.other.level" value="${log.other.level}" /> <!-- 其他日誌級別 -->
	<property name="log.base" value="${log.base}" /> <!-- 日誌路徑,這裡是相對路徑,web專案eclipse下會輸出到eclipse的安裝目錄下,如果部署到linux上的tomcat下,會輸出到tomcat/bin目錄 下 -->
	<property name="log.moduleName" value="${log.moduleName}" />  <!-- 模組名稱, 影響日誌配置名,日誌檔名 -->
	<property name="log.max.size" value="100MB" /> <!-- 日誌檔案大小,超過這個大小將被壓縮 -->

	<!--控制檯輸出 -->
	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method\(\):%L -%msg%n</Pattern>
		</encoder>
	</appender>

	<!-- 用來儲存輸出所有級別的日誌 -->
	<appender name="file.all" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${log.base}/${log.moduleName}.log</File><!-- 設定日誌不超過${log.max.size}時的儲存路徑,注意如果 
			是web專案會儲存到Tomcat的bin目錄 下 -->
		<!-- 滾動記錄檔案,先將日誌記錄到指定檔案,當符合某個條件時,將日誌記錄到其他檔案。 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}/archive/${log.moduleName}_all_%d{yyyy-MM-dd}.%i.log.zip
			</FileNamePattern>
			<!-- 檔案輸出日誌 (檔案大小策略進行檔案輸出,超過指定大小對檔案備份) -->
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>${log.max.size}</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<!-- 日誌輸出的檔案的格式 -->
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method\(\):%L -%msg%n</pattern>
		</layout>
	</appender>
	
	<!-- 這也是用來儲存輸出所有級別的日誌 -->
	<appender name="file.all.other" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${log.base}/${log.moduleName}_other.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}/archive/${log.moduleName}_other_%d{yyyy-MM-dd}.%i.log.zip
			</FileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>${log.max.size}</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method\(\):%L -%msg%n</pattern>
		</layout>
	</appender>

	<!-- 只用儲存輸出error級別的日誌 -->
	<appender name="file.error"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${log.base}/${log.moduleName}_err.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}/archive/${log.moduleName}_err_%d{yyyy-MM-dd}.%i.log.zip
			</FileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>${log.max.size}</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method\(\):%L - %msg%n</pattern>
		</layout>
		<!-- 下面為配置只輸出error級別的日誌 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>

   <!-- 不丟失日誌.預設的,如果佇列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 -->
    <!-- 更改預設的佇列的深度,該值會影響效能.預設值為256 -->
    <!-- 新增附加的appender,最多隻能新增一個 -->
	<appender name="file.async" class="ch.qos.logback.classic.AsyncAppender">
		<discardingThreshold>0</discardingThreshold>
		<queueSize>256</queueSize>
		<includeCallerData>true</includeCallerData>
		<appender-ref ref="file.all" />
	</appender>

	<appender name="file.async.other" class="ch.qos.logback.classic.AsyncAppender">
		<discardingThreshold>0</discardingThreshold>
		<queueSize>256</queueSize>
		<includeCallerData>true</includeCallerData>
		<appender-ref ref="file.all.other" />
	</appender>

	<!-- 為某個包下的所有類的指定Appender 這裡也可以指定類名稱例如:com.aa.bb.ClassName -->
	<logger name="com.lin" additivity="false">
		<level value="${log.root.level}" />
		<appender-ref ref="stdout" /> 
		<appender-ref ref="file.async" /><!-- 即com.lin包下級別為 ${log.root.level}的才會使用file.async來列印 -->
		<appender-ref ref="file.error" />
	</logger>
	
	<!-- root將級別為${log.root.level}及大於${log.root.level}的日誌資訊交給已經配置好的名為“Console”的appender處理,“Console”appender將資訊列印到Console,其它同理 -->
	<root level="${log.root.level}">
		<appender-ref ref="stdout" /> <!--  標識這個appender將會新增到這個logger -->
		<appender-ref ref="file.async.other" />
		<appender-ref ref="file.error" />
	</root>
</configuration>


還有另一個網上的找的配置檔案,筆者 沒有使用過,不過,大家可以參考下來寫:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds" debug="false">

    <!--列印logback初始化日誌系統資訊,debug="true"是同等效果-->
    <!--<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>-->

    <!-- 將日誌輸出在當前專案的根目錄下 -->
    <property name="contextPath" value="/home/logs/valiuser"/>
	<!-- 日誌的上下文路徑 -->
    <property name="logPath" value="${contextPath}"/>
	<!-- 配置日誌的滾動時間 -->
	<property name="maxHistory" value="90"/>
	
	
	<!-- 列印日誌到控制檯 -->
    <appender name="rootConsole" class="ch.qos.logback.core.ConsoleAppender">
    	<!-- encoder 在控制檯列印日誌的格式 -->  
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
        </encoder>
    </appender>

    <!--
    	定義日誌的輸出方式:輸出在資料夾debug/debug.log檔案中
    	配置所有類所有級別的滾動日誌
    -->
    <appender name="rootRollingDebug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/debug/debug.log</file>
		
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/debug/debug.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 設定日誌的滾動時間 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
	
    <!--
    	定義日誌的輸出方式:輸出在資料夾info/root.log檔案中
    	配置所有類INFO級別的滾動日誌
    -->
    <appender name="rootRollingInfo" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/info/info.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 設定日誌的滾動時間 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 
        	info/root.log檔案中的日誌級別是 INFO以上的級別
         	<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 和
         	<filter class="ch.qos.logback.classic.filter.LevelFilter">的區別是什麼呢?
         	
         	LevelFilter:嚴格限制日誌的輸出級別,使用LevelFilter設定,只會在檔案中出現級別為INFO級別的日誌內容。
         --> 
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>  
    		<onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--
    	定義日誌的輸出方式:輸出在資料夾warn/root.log檔案中
    	配置所有類WARN級別的滾動日誌
    -->	
    <appender name="rootRollingWarn" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/warn/warn.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/warn/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 設定日誌的滾動時間 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder> 
        <!-- warn/root.log檔案中的日誌級別是 WARN以上的級別  -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
        </filter>
    </appender>
    <!--
    	定義日誌的輸出方式:輸出在資料夾error/root.log檔案中
    	配置所有類ERROR級別的滾動日誌
    -->
    <appender name="rootRollingError" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/error/error.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 設定日誌的滾動時間 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- error/root.log檔案中的日誌級別是 ERROR以上的級別 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
        </filter>
    </appender>

    <!--
    	定義日誌的輸出方式:輸出在資料夾sql/root.log檔案中
    	配置所有類SQL的日誌
    -->
    <appender name="rootRollingSql" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/sql/sql.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/sql/sql.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 設定日誌的滾動時間 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
	
    <!--
    	定義日誌的輸出方式:輸出在資料夾business/rootsql.log檔案中
    	列印業務邏輯級別的日誌到business檔案下
    -->
    <appender name="businessRollingDebug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/business/business.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/business/business.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 設定日誌的滾動時間 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
	
	<!-- 
		預設的日誌主執行緒<root>
		定義輸出日誌的級別.DEBUG級別
		下面設定的意思是:會將debug級別的日誌輸出在一下這五個appender-ref對應的appender上
	 -->
    <root level="DEBUG">
        <appender-ref ref="rootConsole"/> 
        <appender-ref ref="rootRollingDebug"/>
    </root>
    <root level="WARN">
        <appender-ref ref="rootRollingWarn"/> 
    </root>
    <root level="ERROR">
        <appender-ref ref="rootRollingError"/> 
    </root>
    <root level="INFO">
        <appender-ref ref="rootRollingInfo"/> 
    </root>

	<!-- 
		除了使用預設的日誌主執行緒<root>外,還可以通過<logger>標籤定製其他日誌執行緒如:
		其中name指定執行緒針對的包路徑,level是日誌級別,<appender-ref>定義使用那種appender。
	 -->

    <!--log4jdbc   begin -->
    
    <!-- 
    	jdbc.sqlonly不顯示sql執行的時間
    	jdbc.sqltiming顯示sql執行的時間{executed in 2 msec} 
    	二者使用一個即可
    
    <logger name="jdbc.sqlonly" level="DEBUG"  addtivity="false">
        <appender-ref ref="rootConsole"/>
        <appender-ref ref="rootRollingSql"/>
    </logger>
    
    -->
    <logger name="jdbc.sqltiming" level="DEBUG" addtivity="false">
        <appender-ref ref="rootConsole"/>
        <appender-ref ref="rootRollingSql"/>
    </logger>
    
    <!--log4jdbc   end -->
    
	<!-- 
		列印專案中com包下的日誌到appender-ref指定的appender中  列印級別是debug
		這裡可以用來專門列印某一類別的日誌到某一個特定的檔案中.
		比如:可以列印所有的業務邏輯到業務邏輯檔案中;列印所有的controller請求到指定的檔案中.
	-->
    <logger name="com" level="DEBUG" addtivity="true">
        <appender-ref ref="businessRollingDebug"/>
    </logger> 
	<!-- 
		列印具體的某個檔案中的日誌到某個資料夾下.
		注意:不是列印com.baihui.LogBackTest2資料夾下的日誌,而是LogBackTest2檔案的日誌
		addtivity="false" 表示列印的日誌不向上傳遞,如果設定成addtivity="true"會怎麼樣呢?沒錯,日誌列印了兩遍
	 -->
	<logger name="com.baihui" level="DEBUG" addtivity="false">
        <appender-ref ref="rootConsole"/>
    </logger>
    
    <logger name="baihui" level="ERROR" addtivity="false">
        <appender-ref ref="rootConsole"/>
    </logger>
    
</configuration>


附件

 <pattern>裡面的轉換符說明:

轉換符 作用
c {length } 
lo {length } 
logger {length } 
輸出日誌的logger名,可有一個整形引數,功能是縮短logger名,設定為0表示只輸入logger最右邊點符號之後的字串。
Conversion specifier Logger name Result
%logger mainPackage.sub.sample.Bar mainPackage.sub.sample.Bar
%logger{0} mainPackage.sub.sample.Bar Bar
%logger{5} mainPackage.sub.sample.Bar m.s.s.Bar
%logger{10} mainPackage.sub.sample.Bar m.s.s.Bar
%logger{15} mainPackage.sub.sample.Bar m.s.sample.Bar
%logger{16} mainPackage.sub.sample.Bar m.sub.sample.Bar
%logger{26} mainPackage.sub.sample.Bar mainPackage.sub.sample.Bar
C {length } 
class {length } 
輸出執行記錄請求的呼叫者的全限定名。引數與上面的一樣。儘量避免使用,除非執行速度不造成任何問題。
contextName 
cn 
輸出上下文名稱。
d {pattern } 
date {pattern } 
輸出日誌的列印日誌,模式語法與java.text.SimpleDateFormat 相容。
Conversion Pattern Result
%d 2006-10-20 14:06:49,812
%date 2006-10-20 14:06:49,812
%date{ISO8601} 2006-10-20 14:06:49,812
%date{HH:mm:ss.SSS} 14:06:49.812
%date{dd MMM yyyy ;HH:mm:ss.SSS} 20 oct. 2006;14:06:49.812
F / file 輸出執行記錄請求的java原始檔名。儘量避免使用,除非執行速度不造成任何問題。
caller{depth}caller{depth, evaluator-1, ... evaluator-n} 輸出生成日誌的呼叫者的位置資訊,整數選項表示輸出資訊深度。

例如, %caller{2}   輸出為:

0    [main] DEBUG - logging statement 
Caller+0   at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22)
Caller+1   at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)

例如, %caller{3}   輸出為:

16   [main] DEBUG - logging statement 
Caller+0   at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22)
Caller+1   at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)
Caller+2   at mainPackage.ConfigTester.main(ConfigTester.java:38)
L / line 輸出執行日誌請求的行號。儘量避免使用,除非執行速度不造成任何問題。
m / msg / message

輸出應用程式提供的資訊。

M / method 輸出執行日誌請求的方法名。儘量避免使用,除非執行速度不造成任何問題。
n 輸出平臺先關的分行符“\n”或者“\r\n”。
p / le / level 輸出日誌級別。
r / relative 輸出從程式啟動到建立日誌記錄的時間,單位是毫秒
t / thread 輸出產生日誌的執行緒名。
replace(p ){r, t}

p 為日誌內容,r 是正則表示式,將p 中符合r 的內容替換為t 。

例如, "%replace(%msg){'\s', ''}"

更多技術請關注筆者微信技術公眾號"單例模式"