How to add the date timestamp to log4j2 logfiles?

前端 未结 5 1916
无人及你
无人及你 2021-02-14 04:03

I want to create day dependent logfiles with log4j2:


<
相关标签:
5条回答
  • 2021-02-14 04:35

    In yaml check the Property filePattern defined as "${date:yyyy-MM-dd}", which helps to tag the date. If you are interested to tag the HOSTNAME environment variable to date then : "${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"
    
    0 讨论(0)
  • 2021-02-14 04:36

    To append the filename with date, replace %d with below format, i was having the same problem and but got by doing so :

    <RollingFile name="APP" fileName="application-${date:yyyy-MM-dd}.log" />
    
    0 讨论(0)
  • 2021-02-14 04:38

    Try this:

    <?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>
    
    0 讨论(0)
  • 2021-02-14 04:43

    Use ASizeBasedTriggeringPolicy class in appender. You can even append the current second to the logfile name. %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);
        }
    }
    

    Then use ASizeBasedTriggeringPolicy in log appender

    <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>
    
    0 讨论(0)
  • 2021-02-14 04:45

    The pattern should not be given in the attribute "fileName" rather you have to specify the pattern in the attribute "filePattern" as like below.

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

    The "%i" is the counter that will be automatically incremented in rollover.

    Hope this will help you.

    0 讨论(0)
提交回复
热议问题