Re: [D] Java CRaC support on static defined Loggers [loggi ng-log4j2]

ppkarwasz (via GitHub) <[email protected]>
Newsgroups gmane.comp.jakarta.log4j.devel
Message-ID <ghd-D_kwDOAKJSSM4Aiaem-3eb011e5-6f2c-47f1-9793-85a1d310a40d__14444.2490230844$1761730701$gmane$org@gitbox.apache.org>
GitHub user ppkarwasz added a comment to the discussion: Java CRaC support on static defined Loggers

Log4j Core does define a [`LifeCycle`](https://logging.apache.org/log4j/2.x/javadoc/log4j-core/org/apache/logging/log4j/core/LifeCycle.html) interface, and many Core plugins implement it. In principle this means that calling `AbstractConfiguration#stop()` and then `AbstractConfiguration#start()` could be used to restart the logging system.

However, `LifeCycle` support in Log4j Core is currently inconsistent and largely untested, especially for appenders. For example:

* Most file-based appenders open files in their constructors rather than in `start()`.
* As a result, calling `stop()` followed by `start()` will not correctly re-acquire file resources.
* Similar issues exist in other components which manage I/O resources.

Improving this is feasible but non-trivial. It would require refactoring components to follow a consistent LifeCycle contract:

* Resource acquisition should happen in `start()`, not in the constructor.
* Resource release should happen in `stop()`.
* Components should be prepared to operate through multiple start/stop cycles.

We could make progress incrementally by addressing the most commonly used components first:

1. `ConsoleAppender`
2. `FileAppender`, `RandomAccessFileAppender` and `MemoryMappedFileAppender`,
3. `RollingFileAppender` and `RollingRandomcAccessFileAppender`
4. Others (e.g. socket appenders, JDBC appender, etc.)

This is an area where contributions are welcome.

### On Managers (`FileManager`, etc.)

Managers like `FileManager` are not good candidates for restart logic. They are designed as thin wrappers around resources and are cached globally via the `AbstractManager` registry. Once a `FileManager` is closed, it unregisters itself from the `AbstractManager` registry and should not be reused. Restarting a configuration should create new managers rather than trying to restart old ones.

A better approach would be to:

* Move creation of managers (like `FileManager`) out of the appender constructor/builder.
* Instantiate managers inside the appender's `start()` method instead.
* Ensure `stop()` closes and unregisters managers properly.


GitHub link: https://github.com/apache/logging-log4j2/discussions/3954#discussioncomment-14813872

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.