Hi Christian,

On 27.10.2025 05:22, Christian Grobmeier wrote:
> Gary effectively added a getter because it helped him; additionally,
> he mentioned that using the path was a good idea anyway.


I agree that adding `Path` support is useful, but there are two issues
with the current proposal in PR #3855:

1. The PR mainly introduces a helper method wrapping
   `Paths.get(getFileName())`. In the past Gary has himself rejected
   similar PRs to Commons projects that added a single helper without a
   compelling use case.

2. The change is applied only to `FileManager`, leaving two other file
   managers (`RandomAccessFileManager` and `MemoryMappedFileManager`)
   without equivalent support. (Correction to my earlier review [1]:
   `RollingFileManager` and `RollingRandomAccessFileManager` would
   inherit the method.)

While rewriting the documentation I’ve seen multiple features added to
only *one* file appender simply because it was the one a contributor
happened to use. This inconsistency causes long-term maintenance and
documentation problems. Releasing 2.26.0 with only *partial* `Path`
adoption would feel incomplete.


> The response was "do it during work time". I don't think so: we
> don't ask anyone to pay for changes, we don't force committers to do 
> changes during work time. We look at the project's benefits.

It was not my intention to suggest that Gary should only work on this
during his employer’s time. I raised the possibility of funding because
Gary mentioned the change was important to his employer, and I thought
it might be an opportunity to support a broader and more sustainable
effort rather than a minimal change. I clarified this when the topic
came up earlier on `private@` [3].

Gary has a long track record of major OSS contributions [2], and I’m
very aware of the time constraints that come with maintaining multiple
projects. Without that context, I can see how my comment might have been
misunderstood, and I apologize for the confusion.


> Gary explained further, but even a bigger change was requested. I
> know there was no evil intent, but I also see how frustrating this
> can be.


The improvement I suggested in [4] is split into **two steps**, with the
first step being small and achievable (estimated ~8 hours of work). Step
1 can itself be divided into two incremental parts:

**Step 1a:** Convert `fileName` from `String` to `Path` during
configuration, so conversion happens once rather than repeatedly. This
also enables future path validation and security checks.

**Step 1b:** Apply the same change consistently across all file
managers, not just `FileManager`, i.e. include `RandomAccessFileManager`
and `MemoryMappedFileManager`.


> It is not going to work this way, and while we need to keep RTC, we 
> need to open up. We have started gatekeeping.

I hear this concern, and I agree we must stay open to contributions. At
the same time, Log4j is a mature project, and small, narrowly scoped
changes can introduce inconsistency if we don’t think about the overall
design. Both Volkan and I support adding `Path` to the API, we just want
to ensure users benefit across all file appenders and that the change is
clearly visible and meaningful in release notes.


> Is a path better than a string? Move forward, merge.
> 
> [...]
> 
> I'd suggest the following for minor fixes like this:
> 
> - If a PR of a committer is opened, check if it harms (format,
>   security-wise, or introduces bugs). Accept it as quickly as possible,
>   even if you disagree with the long-term goal.
> - If unhappy with the PR, bring the topic up on the dev list again,
>   ask for a revert, improvement, or a discussion on the goal


Path is certainly preferable to String, provided it is introduced
consistently. Rather than blocking each other on this PR, I’d like to
suggest a constructive way forward:

1. Gary continues with the public API changes in PR #3855 by:
   - Adding `getPath()` consistently across all file manager
     implementations.
   - Optionally exposing `getPath()` / `setPath()` at the appender level
     (`FileAppender`, `FileAppender.Builder`, etc.).
   - Agreeing on the final method naming (`getPath()` vs.
     `getFilePath()`, etc.).

2. I take care of the internal migration to `Path` by:
   - Continuing the refactoring started in PR #3968 [5], which
     simplifies passing `Path` from `FileAppender` to `FileManager` and
     prepares the codebase for broader NIO adoption.
   - Submitting a follow-up PR that replaces internal `String` file
     handling with `Path` once PR #3968 is reviewed, keeping changes
     focused and easier to evaluate.

Piotr

[1]
https://github.com/apache/logging-log4j2/pull/3855#issuecomment-3113019577
[2] https://github.com/garydgregory
[3] https://lists.apache.org/thread/lzxjkwkbn331tnnz2lyy8fmd9p1mopcf
[4]
https://github.com/apache/logging-log4j2/pull/3855#issuecomment-3113194935
[5] https://github.com/apache/logging-log4j2/pull/3968

Reply via email to