logback使用
1.需要添加的包
logback-classic-1.1.3.jar
logback-core-1.1.3.jar
slf4j-api-1.7.12.jar
2.關于配置文件讀取
系統啟動,默認加載在classpath下的logback.xml 或者 logback-test.xml和 logback.groovy 文件,
一般我們只要在classpath下添加logback.xml文件
3.關于日志創建
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Test { private static final Logger LOGGER = LoggerFactory.getLogger(Test.class); public void logOutPut(){ LOGGER.debug("hello word"); } public static void main(String[] args) { Test t = new Test(); t.logOutPut(); } }4.logback.xml詳解
文檔結構:
<configuration> <contextName></contextName> <property/> <timestamp></timestamp> <appender>...</appender> <logger> ...</logger> <root>...</root> </configuration>
4.1設置根節點
start: configuration
<configuration scan="true" scanPeriod="60 seconds" debug="false">...</configuration >scan : 當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true。
scanPeriod : 設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位(milliseconds、seconds、minutes和hours),默認單位是毫秒(milliseconds)。當scan為true時,此屬性生效。默認的時間間隔為1分鐘。
debug : 當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。
end: configuration
4.2 設置上下文名稱
start:contextName
<contextName>mylogConfig</contextName>每個logger都關聯到logger上下文,默認上下文名稱為“default”。但可以使用<contextName>設置成其他名字,用于區分不同應用程序的記錄。一旦設置,不能修改。
end:contextName
4.3 設置變量
start:property
<configuration> <property name="LogConfig" value="mylogConfig" /> <contextName>${LogConfig}</contextName> </configuration>
用來定義變量值的標簽,通過<property>定義的值會被插入到logger上下文中。定義變量后,可以使“${}”來使用變量。
name : 變量的名稱
value : 變量定義的值
end:property
4.4 獲取時間戳字符串
start:timestamp
<timestamp key="date" datePattern="yyyy-MM-dd"/>key : 標識名字
datePattern : 設置將當前時間(解析配置文件的時間)轉換為字符串的模式,遵循java.txt.SimpleDateFormat的格式。
end:timestamp
4.5 所有日志器的總的設置 root
start:root
<root level="error"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE-AUDIT" /> </root>
也是<loger>元素,但是它是根loger
level : 設置所有日志的輸出級別
<appender-ref>:設置所有日志的apender
end:root
4.6 個別日志器的個性化設置 logger
start:logger
<logger name="com.mkyong.web" level="debug" additivity="false"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE-AUDIT" /> </logger>用來設置某一個包或者具體的某一個類下的日志的打印級別、以及為其指定<appender>。
name : 可以是某一級的包名,也可以是一個完整的類名。必要
level : 打印級別,如果不指定默認為root中的打印級別
additivity : 是否向上級loger傳遞打印信息。默認是true
<appender-ref> : 日志輸出設置,可以為logger其指定多個appender。如果不指定默認為root的appender
end:logger
4.7 設置日志輸出方式appender
star:appender
總的結構(只是列出些常用的)
<appender> <target></target> <encoder></encoder> <filter></filter> <file>文件輸出-指定的文件路徑</file> <append>文件輸出-是否向舊的日志追加新內容</append> <rollingPolicy>文件輸出-文件滾動策略</rollingPolicy> <prudent>文件輸出—</prudent> <triggeringPolicy>文件輸出-激活滾動</triggeringPolicy> </appender>
例1(控制臺輸出):
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <encoder> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} -%msg%n </Pattern> <charset>utf-8</charset> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>error</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> </appender> <appender name="STDOUT_ERROR" class="ch.qos.logback.core.ConsoleAppender"> <target>System.err</target> <encoder> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>error</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
例2(輸出到文件):
<appender name="FILE-AUDIT" class="ch.qos.logback.core.FileAppender"> <encoding>UTF-8</encoding> <!-- today log --> <file>usr/logs/appName/test.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> </encoder> <append>false</append> </appender>
<appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoding>UTF-8</encoding> <!-- today log --> <file>usr/logs/appName/error.today.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> </encoder> <append>false</append> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>usr/logs/appName/archived/error.%d.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> </appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">...</appender>name : appender的標識名稱
class : 指定日志輸出方案的具體實現類。(以下是官方提供的幾種方案)
- ch.qos.logback.core.ConsoleAppender //輸出到控制臺
- ch.qos.logback.core.FileAppender //輸出到文件
- ch.qos.logback.core.rolling.RollingFileAppender //以滾動方式輸出到文件
2.<target>:當為控制臺輸出時可為其指定 System.out 或者 System.err,默認 System.out
3.<encoding> : 設置文件的編碼方式
4.<filter>:設置輸出時過濾策略
5.<file>:當為文件輸出時,為其指定文件路徑。可以是絕對,也可以是相對,如果上級目錄不存在會自動創建,沒有默認值。
6.<append>:當為文件輸出時,是否向舊的日志追加新內容
7.<rollingPolicy>:當發生滾動時,決定 RollingFileAppender 的行為,涉及文件移動和重命名。
8. <prudent> :如果是 true,日志會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認是 false
9.<triggeringPolicy> : 告知 RollingFileAppender 合適激活滾動。
10.<encoder>:
end:appender
一些常用的配置:見《logback常用配置》