使用日期进行文件命名的标准文件记录器?

时间:2012-12-23 15:36:16

标签: java logging java.util.logging

我不太熟悉Java日志记录配置,但我基本上希望我的app-logging能够像使用包装器配置文件来运行Java应用程序一样工作:

wrapper.logfile.rollmode=DATE
wrapper.console.format=PM
wrapper.console.loglevel=INFO
wrapper.logfile=/home/logs/wrapper_YYYYMMDD.log
wrapper.logfile.format=LPTM
wrapper.logfile.loglevel=FINER
wrapper.logfile.maxsize=1m
wrapper.logfile.maxfiles=0

这似乎与典型的logging.properties文件完全不同:

java.util.logging.FileHandler.pattern = logs/java%u.log
java.util.logging.FileHandler.limit = 100000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

有没有一种简单的方法来获得相同的东西?我有点困惑包装器如何映射到内部配置记录器。

1 个答案:

答案 0 :(得分:2)

如果您询问将默认Java Logger与Tanuki Service Wrapper进行比较,则表示您正在将苹果与橙子进行比较。 Tanuki服务包装器实际上在C(header file for the logging code)中实现了它自己的日志系统。所以它与Java日志记录无关。

不幸的是,Java中的默认日志记录系统(java.util.logging包)不支持每日日志轮换。 There's a bug open添加此功能,但目前尚未解决。错误报告提到可以编写自定义处理程序来执行此操作,但这看起来很多工作,并且错误报告提到它可能会干扰其他应用程序。

到目前为止,最简单的解决方案是使用Logback,它是log4j的继承者,这是另一种可行的选择。这些第三方开源库中的任何一个都提供了开箱即用的每日滚动文件追加器选项。

例如,从documentation开始,这是一个logback.xml文件的示例,它将Logback配置为记录到每天翻转的文件,每个文件的大小最大为1 MB :

<configuration>
  <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>mylog.txt</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 1MB -->
        <maxFileSize>1MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>


  <root level="DEBUG">
    <appender-ref ref="ROLLING" />
  </root>

</configuration>