I use Log4j with the RollingFileAppender
to create a log rotation based on size.
How can I configure it to log to each file for a certain amount of time before rotating?
For example, so that each log file contains one hour of logs, rotating at the top of each hour?
I configure Log4j programatically in Java using a Properties
object (as opposed to a log4j.properties
file)
You probably want to use a DailyRollingFileAppender. To roll them hourly, for example, you'd use a DatePattern of
'.'yyyy-MM-dd-HH
. For a log4j.properties file:Or for your programmatic configuration:
Unfortunately, using a DailyRollingFileAppender means that you can't limit the file size - this could be problematic if you have tons of logs in the given rolled period.
The other thing to be careful of with any rolling file appender is to make sure only one JVM access a particular log file at a time. This is because log4j caches the log file size for performance reasons, and your 'rolling' will get wonky if multiple JVMs access the same files.
Additionally,
The following list shows all the date patterns which have defined by log4j,
Use a DailyRollingFileAppender.
In particular, setting its 'datePattern' property to
'.'yyyy-MM-dd-HH
would cause file to rotate every hour.You need to use the DailyRollingFileAppender. Despite its misleading name it can be configured in a to run at configurable time periods up to minutes.