二、使用slf4j和logback输出日志到文件_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 二、使用slf4j和logback输出日志到文件

二、使用slf4j和logback输出日志到文件

 2013/11/16 3:32:57  czj4451  程序员俱乐部  我要评论(0)
  • 摘要:一、使用slf4j和logback输出日志到控制台二、使用slf4j和logback输出日志到文件和一、使用slf4j和logback输出日志到控制台类似,改动的地方:1.logback.xml文件:<appendername="fileAppender"class="ch.qos.logback.core.FileAppender"><file>/logs/granularity.log</file><!--encoder必须指定
  • 标签:输出 使用 文件
一、使用slf4j和logback输出日志到控制台
二、使用slf4j和logback输出日志到文件


和一、使用slf4j和logback输出日志到控制台类似,改动的地方:

1. logback.xml文件:
class="java" name="code">
<appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
    <file>/logs/granularity.log</file>
    <!-- encoder必须指定,否则不会往文件输出内容 -->
    <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能够安全地将日志输出到同一个文件中。
    这是通过锁定文件通道实现的:

  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方法中处理的:

  if (prudent) {
    if (!isAppend()) {
      setAppend(true);
      addWarn("Setting \"Append\" property to true on account of \"Prudent\" mode");
    }
  }
发表评论
用户名: 匿名