java - logback 在名称为当前日期的文件夹内创建日志文件

标签 java logback appender

在我当前的项目中,我想按日期创建日志文件,即日志文件应位于
名称为日期的文件夹。 还应在该特定文件夹中进行归档。

我正在使用的当前 appender 看起来像这样(它根据大小归档日志文件)。

    <appender name="AUDITFILE"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${PROJECT_HOME}\\projectname\\audits\\myproject.log</file>
    <append>true</append>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${PROJECT_HOME}\\projectname\\audits\\myproject_%d{yyyy-MM-dd}.%i.zip
        </fileNamePattern>
        <maxHistory>10</maxHistory>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10KB</maxFileSize>

        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
        <pattern>%date %msg%n
        </pattern>
    </encoder>
</appender>

最佳答案

fileNamePattern 的文档中所述,您可以指定多个 %d 标记,以便将日期放在存档文件名的文件夹名称中:

<fileNamePattern>${PROJECT_HOME}\\projectname\\audits\\%d{yyyy-MM, aux}\\myproject_%d{yyyy-MM-dd}.%i.zip</fileNamePattern>

请注意,只有一个 %d 标记可以是主要标记,所有其他标记必须通过传递 'aux' 参数标记为辅助标记。

但是如果你也想把它放在非归档文件名的文件名中,那么你有两个选择:

  1. 使用 <timestamp />元素来设置您在路径中使用的变量。但是这个时间戳只会在启动时设置一次,所以它适合批量运行但不适合服务。

  2. 像上面的 (1) 一样,但是把 <appender/> 包装起来和 <timestamp />SiftingAppender ,如果使用 logback >=1.0.12 的版本,这将使时间戳能够被重新评估。不确定您要如何配置 SiftingAppender .但希望这会让您走上正轨。

关于java - logback 在名称为当前日期的文件夹内创建日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16278720/

相关文章:

java - primefaces 3.3<p :fileupload> always allow users to select several files. 如何防止它上传视频?

tomcat - Spring Boot - 忽略独立 Tomcat/外部 logback 文件

logback - 在 SLF4J 中使用 JSON 日志记录时如何包含多个 JSON 字段?

java - 具有不同表达式类型的嵌套开关

java - 本地类中的私有(private)属性

java - 添加到 HashMap 上的列表值

java - TimeBasedRollingPolicy 以编程方式登录

java - 按大小和时间滚动日志

java - log4j:如何使用 SocketAppender?

redis - 有没有办法在将记录添加到 redis 中的键时发布消息?