Add Log4j2 rolling policy configuration #47260
Open
+792
−5
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Hello! Log4j2 does not support rolling policies. So this PR adds basic rolling policy configuration property support for Log4j2. It introduces Log4j2 specific properties equivalent to the existing
logging.logback.rollingpolicy.*
properties, enabling consistent logging configuration through application.properties across different logging implementations.And advanced rolling strategy support to the Log4j2 rolling policy configuration. It introduces the
SpringBootTriggeringPolicy
plugin to enable various rolling strategies and strategy-specific detailed configuration through application.properties.Key Changes
1. Standardized Log4j2 Rolling Policy Properties (b98d74f)
We've added standard properties for Log4j2, similar to the existing
logging.logback.rollingpolicy.*
properties. Users can now easily control the rolling policy using the following attributes inapplication.properties
:2. Advanced Rolling Strategy (for commits after ddda65e)
A custom Log4j2 plugin,
SpringBootTriggeringPolicy
, has been introduced to support various advanced rolling strategies beyond simple size-based rolling.size
(default): Rolls files based on their size.time
: Rolls files based on a time interval.size-and-time
: Rolls when both size and time conditions are met.cron
: Rolls based on a cron expression schedule.Implementation Details
1. Property Standardization Implementation
Log4j2RollingPolicySystemProperty
Enum: An enum was implemented to map Spring Environment properties to system properties that Log4j2 can recognize (e.g.,max-file-size
→LOG4J2_ROLLINGPOLICY_MAX_FILE_SIZE
).Log4j2LoggingSystemProperties
Class: This class handles the automatic conversion of Spring'sDataSize
type to bytes and ensures backward compatibility with deprecated properties likelogging.file.max-size
.log4j2-file.xml
Modification: The configuration file was updated to reference the newly defined system properties using the${sys:PROPERTY_NAME}
syntax.2. Advanced Rolling Strategy Implementation
SpringBootTriggeringPolicy
Plugin: A customTriggeringPolicy
was implemented using Log4j2's@Plugin
annotation. Based on thestrategy
property, this plugin internally selects and delegates to the appropriate policy (e.g., SizeBasedTriggeringPolicy, TimeBasedTriggeringPolicy).log4j2-file.xml
Update: The<Policies>
block was modified to useSpringBootTriggeringPolicy
, with its parameters (maxFileSize, timeInterval, cronExpression, etc.) configured via system properties.Configuration Examples
Time-based Rolling
Size and Time Composite Rolling
Cron Expression-based Rolling
Compatibility
logging.file.max-size
andlogging.file.max-history
continue to work as expected.logging.log4j2.rollingpolicy.*
properties are set, they will take precedence over the older properties.