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常用配置》