Deepak Tripathi
Deepak Tripathi

Reputation: 630

Apppend log message at beginning of file log4j

1. I am trying to add log message at beginning of file so that I can see latest message first on log file.

2. I want to add month and year after log file but I am not getting that in current active file. eg - test_2015-04-22.log

property file is given below -

log4j.appender.APP=org.apache.log4j.DailyRollingFileAppender
log4j.appender.APP.File=${catalina.base}/logs/test.log
log4j.appender.APP.Append=true
log4j.appender.APP.Encoding=UTF-8
log4j.appender.APP.DatePattern='.'yyyy-MM
log4j.appender.APP.layout = org.apache.log4j.PatternLayout
log4j.appender.APP.layout.ConversionPattern =%d{yyyy-MM-dd HH:mm} - %m%n
log4j.appender.APP.filePattern =Test_%d{yyyy-MM-dd}.log

Upvotes: 2

Views: 2311

Answers (2)

Remko Popma
Remko Popma

Reputation: 36794

Your question shows a log4j-1.2 configuration, but since the question also has a log4j2 tag, I feel free to answer this by showing you how to accomplish this with log4j2.

In log4j2, you can declare a property that formats the date, then use this property to configure your appender file name.

Also, you can use the header attribute of the pattern layout to set a header that is output at the beginning of a file. For RollingFileAppender this header will be output on every rollover.

Use one of the lookups built-in to log4j2 to dynamically change the output of your header at rollover time.

Example:

<Configuration status="WARN"><!-- use TRACE to troubleshoot your config if needed-->
  <Properties>
    <property name="yyyyMMdd">${date:yyyyMMdd}</property>
  </Properties>

  <Appenders>
    <RollingFile name="Application" 
            fileName="${sys:catalina.base}/logs/test${sys:yyyyMMdd}.log"
            filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
      <PatternLayout header="File: ${main:--file}">
        <Pattern>%d{yyyy-MM-dd HH:mm} - %m%n</Pattern>
      </PatternLayout>
      <Policies>
        <TimeBasedTriggeringPolicy />
      </Policies>
    </RollingFile>
  <Appenders>

  <Loggers>
    <root level="trace">
      <AppenderRef ref="Application" />
    </root>
  </Loggers>
</Configuration>

Upvotes: 2

Stephan
Stephan

Reputation: 8090

  1. it's not possible , think of the file as a stack which respects LAST In FIRST Out which makes perfect sense when debugging to see the last message at the end.
  2. The log for today will have the name test.log but tomorrow it will be renamed to Test_2015-04-22.log

Upvotes: 1

Related Questions