【问题标题】:How to add the date timestamp to log4j2 logfiles?如何将日期时间戳添加到 log4j2 日志文件?
【发布时间】:2015-07-28 07:34:23
【问题描述】:

我想用log4j2 创建依赖日期的日志文件:

<RollingFile name="APP" fileName="application-%d{yyyy-MM-dd}.log" />

结果日志文件名:application-%d{yyyy-MM-dd}.log,时间戳未被替换。为什么?

【问题讨论】:

    标签: java log4j log4j2


    【解决方案1】:

    要将文件名附加日期,请将 %d 替换为以下格式,我遇到了同样的问题,但这样做了:

    <RollingFile name="APP" fileName="application-${date:yyyy-MM-dd}.log" />
    

    【讨论】:

    【解决方案2】:

    模式不应在属性“fileName”中给出,而您必须在属性“filePattern”中指定模式,如下所示。

    <RollingFile name="RollingFile" fileName="${log-path}/filename.log" 
    filePattern="${log-path}/filename-%d{yyyy-MM-dd}-%i.log" >
    ...
    ...
    </RollingFile>
    

    “%i”是在翻转时自动递增的计数器。

    希望这会对你有所帮助。

    【讨论】:

    • 这不会在当前日志文件中添加带有今天日期的文件名
    【解决方案3】:

    试试这个:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn" name="MyApp" packages="">
    
        <Properties>
            <Property name="log-path">D:/logs/</Property>
        </Properties>
    
        <Appenders>
    
            <RollingFile name="DebuggerLogger" fileName="${log-path}CMSAutomation.${date:yyyy-MM-dd_hh-mm-ss}.log" filePattern="${log-path}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
                <PatternLayout>
                    <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
                </PatternLayout>
                <Policies>
                    <TimeBasedTriggeringPolicy />
                    <SizeBasedTriggeringPolicy size="10 MB" />
                </Policies>
            </RollingFile>
    
        </Appenders>
    
        <Loggers>
            <Root level="ALL">
                <AppenderRef ref="DebuggerLogger"/>
            </Root>
        </Loggers>
    
    </Configuration>
    

    【讨论】:

    • 您需要在 24 小时内使用 ${date:yyyy-MM-dd_HH-mm-ss}。其他上午 5 点和下午 5 点都显示为 05。
    【解决方案4】:

    在 appender 中使用 ASizeBasedTriggeringPolicy 类。 您甚至可以将当前秒附加到日志文件名称。 %d{yyyy_MM_dd HH.mm.ss}

    import org.apache.logging.log4j.core.LogEvent;
    import org.apache.logging.log4j.core.appender.rolling.*;
    import org.apache.logging.log4j.core.config.plugins.Plugin;
    import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
    import org.apache.logging.log4j.core.config.plugins.PluginFactory;
    
    @Plugin(name = "ASizeBasedTriggeringPolicy",
            category = "Core",
            printObject = true
    )
    public class ASizeBasedTriggeringPolicy extends AbstractTriggeringPolicy {
        private SizeBasedTriggeringPolicy sizeBasedTriggeringPolicy;
        private RollingFileManager aManager;
    
        protected ASizeBasedTriggeringPolicy(String maxFileSize) {
            sizeBasedTriggeringPolicy = SizeBasedTriggeringPolicy.createPolicy(maxFileSize);
    
        }
    
        public void initialize(RollingFileManager aManager) {
            sizeBasedTriggeringPolicy.initialize(aManager);
            this.aManager = aManager;
        }
    
        public boolean isTriggeringEvent(LogEvent event) {
            if (sizeBasedTriggeringPolicy.isTriggeringEvent(event)) {
                aManager.getPatternProcessor().setPrevFileTime(System.currentTimeMillis());
                return true;
            } else {
                return false;
            }
        }
    
        @PluginFactory
        public static ASizeBasedTriggeringPolicy createPolicy(@PluginAttribute("size") String size) {
            return new ASizeBasedTriggeringPolicy(size);
        }
    }
    

    然后在日志追加器中使用ASizeBasedTriggeringPolicy

    <RollingFile name="complete-log" fileName="${log-path}/complete-${date:yyyy_MM_dd HH.mm.ss} .log" 
                     filePattern="${log-path}/app-complete-%d{yyyy_MM_dd HH.mm.ss} - %i.log" >
        ...
        ... 
        <Policies>
             <ASizeBasedTriggeringPolicy size="200 kB"  />
        </Policies>
    </RollingFile>
    

    【讨论】:

      【解决方案5】:

      在 yaml 中检查属性filePattern 定义为"${date:yyyy-MM-dd}",这有助于标记日期。如果您有兴趣将HOSTNAME 环境变量标记为最新,那么:"${env:HOST}-${date:yyyy-MM-dd}"

      Properties:
          Property:
            - name: log-path
              value: "logs"
            - name:  filePattern
              value: "${date:yyyy-MM-dd}"
      
        Appenders:
      
          Console:
            name: Console_Appender
            target: SYSTEM_OUT
            PatternLayout:
              pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
      
          File:
            name: File_Appender
            fileName: "${log-path}/filelog-${filePattern}.log"
      
            PatternLayout:
              pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
      
          RollingFile:
            - name: RollingFile_Appender
              fileName: "${log-path}/rollingfile-${filePattern}.log"
              filePattern: "logs/archive/rollingfile.log.%d{yyyy-MM-dd-hh-mm}.gz"
              PatternLayout:
                pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
      

      【讨论】:

        猜你喜欢
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        相关资源
        最近更新 更多