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

时间:2015-01-15 22:58:46

标签: xml logging configuration log4j logback

我正在尝试将我的应用程序的所有日志文件整合为更加结构化和有组织的方式。我正在使用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其中应该打印日期的表达式实际上只是将表达式打印为字符串。

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

1 个答案:

答案 0 :(得分:3)

可以在fileNamePattern中定义多个%d {},但你必须将任何其他的标记为辅助。根据回溯手册中的示例(http://logback.qos.ch/manual/appenders.html#tbrpFileNamePattern向下滚动到示例),将LOG_FILE属性更改为以下内容应该每天滚动,将每个日志文件排序到文件夹中:

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

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

<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)
...