[
https://issues.apache.org/jira/browse/LOG4J2-2981?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ralph Goers resolved LOG4J2-2981.
---------------------------------
Fix Version/s: 2.14.1
Resolution: Fixed
Patch applied. Please verify and close.
> OnStartupTriggeringPolicy only rolls over when minsize = 0 with
> DirectWriteTriggeringPolicy
> -------------------------------------------------------------------------------------------
>
> Key: LOG4J2-2981
> URL: https://issues.apache.org/jira/browse/LOG4J2-2981
> Project: Log4j 2
> Issue Type: Bug
> Components: Appenders
> Affects Versions: 2.14.0
> Reporter: Samuel Martin
> Assignee: Ralph Goers
> Priority: Minor
> Labels: Policy, RollingFileAppender
> Fix For: 2.14.1
>
>
> I am trying to use a {{RollingFileAppender}} with a
> {{CompositeTriggeringPolicy}} that includes a {{OnStartupTriggeringPolicy}}
> which is deemed to rollover the log when the JVM is (re-)started.
> However, I have noted that the files only roll over on startup when I specify
> "minsize = 0" on the log4j2.xml configuration file. If I put any other value
> or leave the minsize unspecified (i.e. rely on its default value minsize =
> 1), the appender proceeds writing to the previously existing file.
> I have run the debugger and traced down the bug according as follows.
> All the logic in {{OnStartupTriggeringPolicy.initialize()}} is conditioned
> upon the size of the rolling file being larger than {{minSize}}
> {code:java}
> public void initialize(final RollingFileManager manager) {
> if (manager.getFileTime() < JVM_START_TIME && manager.getFileSize()
> >= minSize) {
> ...
> }
> }
> {code}
> However, {{manager.getFileSize()}} always returns 0, thus the body of that if
> is never entered (... unless {{minSize == 0}}). In fact, this call to
> {{OnStartupTriggeringPolicy.initialize()}} is invoked indeed from
> {{RollingFileManager.initialize()}} *before* any value has been assigned to
> {{size}}
> {code:java}
> public void initialize() {
> if (!initialized) {
> LOGGER.debug("Initializing triggering policy {}",
> triggeringPolicy);
> initialized = true;
> triggeringPolicy.initialize(this);
> if (triggeringPolicy instanceof LifeCycle) {
> ((LifeCycle) triggeringPolicy).start();
> }
> if (directWrite) {
> // LOG4J2-2485: Initialize size from the most recently
> written file.
> File file = new File(getFileName());
> if (file.exists()) {
> size = file.length();
> } else {
> ((DirectFileRolloverStrategy)
> rolloverStrategy).clearCurrentFileName();
> }
> }
> }
> }
> {code}
> Thus, within {{OnStartupTriggeringPolicy.initialize()}},
> {{manager.getFileSize()}} always evaluates to {{0}}, and the only way that
> the file is rolled over at startup is that {{minSize}} has been configured as
> {{0}}.
> As a side consequence, this may also affect SizeBaseTriggerinPolicy if a
> rollover is needed by coincidence during startup.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)