1

我对 Java 日志配置不太熟悉,但我基本上希望我的应用程序日志能够以与使用包装器配置文件运行 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

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

4

1 回答 1

2

如果您询问将默认 Java Logger 与Tanuki Service Wrapper进行比较,您将苹果与橙子进行比较。Tanuki 服务包装器实际上实现了它自己的日志系统......在 C 中(日志代码的头文件)。所以它真的与Java日志无关。

不幸的是,Java(包)中的默认日志系统java.util.logging不支持每日日志轮换。有一个错误打开以添加此功能,但目前尚未解决。错误报告提到可以编写自定义处理程序来执行此操作,但这似乎需要做很多工作,并且错误报告提到它可能会干扰其他应用程序。

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

例如,在文档中,这是一个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>
于 2012-12-23T16:08:31.097 回答