摘要:本文主要介紹瞭如何在spring、springMVC中使用logback java
1、logback與Spirng結合使用
一、maven添加引用: mysql
- <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一塊兒使用的。
二、src/main/resource添加logback.xml linux
- <?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裏來配置,也能夠直接寫死就是 web
<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" /> 正則表達式
參數內容以下: spring
- <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>
三、若是單獨的跑一個spring項目,不帶web頁面的話,那麼這時跑個單元測試就能夠打印日誌了
看看輸出的文件:
2、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項目日誌保存路徑的不一樣!
下面這一個是配置比較複雜的,大的工程更多的是以這種方式來配置的,針對不一樣的包,不一樣級別的日誌來分別打印,以下:
還有另外一個網上的找的配置文件,筆者 沒有使用過,不過,你們能夠參考下來寫:
附件
<pattern>裏面的轉換符說明: sql
轉換符 |
做用 |
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} 輸出爲: api 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 |
輸出應用程序提供的信息。 tomcat |
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', ''}" |