1. logback[-test].xml文件:
java
Java代碼 安全
<appender name="fileAppender" class="ch.qos.logback.core.FileAppender"> <file>/logs/granularity.log</file> <encoder><!-- 必須指定,不然不會往文件輸出內容 --> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern> </encoder> <append>true</append> <prudent>false</prudent> </appender> <root level="DEBUG"> <appender-ref ref="fileAppender" /> </root>
調用測試類的方法,生成granularity.log文件。
附:
①. prudent:當心的,慎重的。若是設置爲true,不一樣JVM的file appenders可以安全地將日誌輸出到同一個文件中。
這是經過鎖定文件通道實現的:
app
Java代碼 測試
protected void writeOut(E event) throws IOException { if (prudent) { safeWrite(event); } else { super.writeOut(event); } } private void safeWrite(E event) throws IOException { ResilientFileOutputStream resilientFOS = (ResilientFileOutputStream) getOutputStream(); FileChannel fileChannel = resilientFOS.getChannel(); if (fileChannel == null) { return; } FileLock fileLock = null; try { fileLock = fileChannel.lock(); // 加鎖 long position = fileChannel.position(); long size = fileChannel.size(); if (size != position) { fileChannel.position(size); } super.writeOut(event); } finally { if (fileLock != null) { fileLock.release(); // 釋放鎖 } } }
②. 當prudent爲true時,若是append設置爲false,會被強行轉成true。
這是在start方法中處理的:
spa
Java代碼 日誌
if (prudent) { if (!isAppend()) { setAppend(true); addWarn("Setting \"Append\" property to true on account of \"Prudent\" mode"); } }