logback系列之二:輸出日誌到文件

1. logback[-test].xml文件: 
java

Java代碼  安全

  1. <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代碼  測試

  1. 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");
    }
  }
相關文章
相關標籤/搜索