logback與Spring、SpringMVC結合使用教程
來自: http://blog.csdn.net/evankaka/article/details/50637994
林炳文Evankaka原創作品。轉載請注明出處http://blog.csdn.net/evankaka
摘要:本文主要介紹了如何在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>christmas258@</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最右邊點符號之后的字符串。
|
||||||||||||||||||||||||
| C {length } class {length } |
輸出執行記錄請求的調用者的全限定名。參數與上面的一樣。盡量避免使用,除非執行速度不造成任何問題。 | ||||||||||||||||||||||||
| contextName cn |
輸出上下文名稱。 | ||||||||||||||||||||||||
| d {pattern } date {pattern } |
輸出日志的打印日志,模式語法與java.text.SimpleDateFormat 兼容。
|
||||||||||||||||||||||||
| 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', ''}" |
本文由用戶 Lea7129 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!