Logback XML 时间戳打印文字表达式字符串

Logback XML Timestamp Printing Literal Expression String

我正在尝试将我的应用程序的所有日志文件合并为更有条理和更有条理的方式。我正在使用 logback,简而言之,我试图让我的日志文件每天滚动 - 每月滚动到模式 logs/MM-yyyy/application.MM-dd-yyyy.log.

的文件目录

下面你可以看到我当前的 logback.xml 文件配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_FILE" value="logs/%d{MM-yyyy}/application.%d{MM-dd-yyyy}.log"/>
    <property name="LOG_FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${LOG_FILE_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}</fileNamePattern>
        </rollingPolicy>
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>
</configuration>

问题是由于某种原因,日志实际上将转到一个文字文件结构 logs/%d{MM-yyyy}/application.%d{MM-dd-yyyy}.log 应该打印日期的表达式实际上只是将表达式打印为字符串。

任何人都可以看到我正在做的事情中的问题或为我正在做的事情提供更好的解决方案吗?所有帮助表示赞赏。干杯!

可以在 fileNamePattern 中定义多个 %d{},但您必须将任何额外的标记为辅助。根据 logback 手册中的示例(http://logback.qos.ch/manual/appenders.html#tbrpFileNamePattern 向下滚动到示例),将您的 LOG_FILE-property 更改为以下应该每天滚动,将每个日志文件分类到文件夹中:

<property name="LOG_FILE" value="logs/%d{MM-yyyy,aux}/application.%d{MM-dd-yyyy}.log"/>

由于 <file>-tag 没有模式替换,您必须提供当前活动日志文件所在位置的常规路径:

<file>logs/application.log</file>

虽然我目前无法在我所在的地方进行测试和验证,但最终结果应该是这样的结构:

$APP_ROOT/logs/application.log (Currently active log file)
$APP_ROOT/logs/12-2014/*.log (Daily rolled over logs for December 2014)
$APP_ROOT/logs/11-2014/*.log (Daily rolled over logs for November 2014)
...