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");
    }
  }
相关文章
相关标签/搜索