One log file to run with log4j

How do you configure log4j.properties to have exactly one log file per application launch. I read that you should use a timestamp in the file name, but over time many files will be created per launch.

I tried DailyRollingFileAppender and RollingFileAppender, but cannot find a way to configure exctly one log per run. The log should not be split into several logs, and it should not be truncated, and files of old runs should be saved.

Each class has a static org.slf4j.Logger for its own class name:

private static final Logger log = LoggerFactory.getLogger(Foo.class); 

These are my current log4j.properties

 log4j.rootLogger=error, RootAppender, RootErrorAppender #log4j.logger.com.example=info, qspaBackendAppender, stderr log4j.logger.com.example=info, qspaBackendAppender log4j.additivity.com.example=true #log4j.logger.com.example.util=trace, qspaBackendAppender, stderr #log4j.additivity.com.example.util=true log4j.appender.qspaBackendAppender=org.apache.log4j.DailyRollingFileAppender log4j.appender.qspaBackendAppender.file=logs/qspaBackend.log log4j.appender.qspaBackendAppender.layout=org.apache.log4j.PatternLayout log4j.appender.qspaBackendAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n log4j.appender.stderr=org.apache.log4j.ConsoleAppender log4j.appender.stderr.Target=System.err log4j.appender.stderr.layout=org.apache.log4j.PatternLayout log4j.appender.stderr.layout.ConversionPattern=%-5p %c{1}:%L - %m%n log4j.appender.RootAppender=org.apache.log4j.RollingFileAppender log4j.appender.RootAppender.file=logs/root.log log4j.appender.RootAppender.layout=org.apache.log4j.PatternLayout log4j.appender.RootAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n log4j.appender.RootErrorAppender=org.apache.log4j.RollingFileAppender log4j.appender.RootErrorAppender.file=logs/rootError.log log4j.appender.RootErrorAppender.layout=org.apache.log4j.PatternLayout log4j.appender.RootErrorAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n log4j.appender.RootErrorAppender.threshold=error 
+7
java logging slf4j log4j appender
source share
2 answers

Combine the answer of Udo Klimaschewski and the answer from this question to get the desired result.

  • add property append = false
  • add the current.time system property and use it in the file name
+2
source share

I had problems with the search, to which Udo Klimashevsky replied that Udi referred, so I put my solution here. log4j.properties:

 # Root logger option log4j.rootLogger=INFO, fileout # Direct log messages to file log4j.appender.fileout=org.apache.log4j.FileAppender log4j.appender.fileout.File=/logs/myapp_${current.date}.log log4j.appender.fileout.ImmediateFlush=true log4j.appender.fileout.Threshold=debug log4j.appender.fileout.Append=false log4j.appender.fileout.layout=org.apache.log4j.PatternLayout log4j.appender.fileout.layout.conversionPattern=%5p | %d | %m%n 

Then put this block in the main class:

 public class Starter { static{ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hhmmss"); System.setProperty("current.date", dateFormat.format(new Date())); } 
+10
source share

All Articles