ppkarwasz commented on issue #3368:
URL: 
https://github.com/apache/logging-log4j2/issues/3368#issuecomment-2589122422

   > I think the problem mostly emanates from a disagreement between 
maintainers on what is the API boundary for Log4j Core. For sure everyone 
agrees that the configuration file format is one such API – we shouldn't break 
it. What else? Shall we make `FileAppender` public too? Some users, even though 
they represent a tiny fraction of the total, will certainly find that helpful. 
But why do we stop there? What about `FileManager`, `AbstractManager`, and 
`OutputStreamManager` too? Those are handy too! My point is, if we want to 
accept `FileAppender` as a programmatically consumable public API of Log4j 
Core, we need to involve dozens and dozens more auxiliary support classes into 
that batch. This not only explodes the maintenance responsibility, severely 
hinders the evolution of the project. Mistakes will not be able to decently get 
corrected due to backward compatibility concerns. Since Log4j was invented at a 
time JPMS did not exist, now we treat everything public in Log4j Core as an
  API surface. It is at such a bad level, some maintainers even insist we 
should include test modules (e.g., `log4j-core-test`) in that group too. Can 
you pause for a second an try to grasp the API surface supported by 2 F/OSS 
developers in their spare time?
   
   Basically we don't consider those classes as part of the API, but we don't 
introduce breaking changes in it either. :wink:
   Sure, if we were to write Log4j 2 today, most of the Log4j plugins 
(`FileAppender`, etc.) would be internal classes.
   
   > For example, this will throw NPEs (trying to represent an undefined 
onResult/onMismatchResult).
   > 
   > ```
   > var filterBuilder =
   >         configBuilder.newFilter("BurstFilter",
   >                                 (Filter.Result) null,
   >                                 (Filter.Result) null);
   > ```
   
   This is a known bug (#2791 and 
[LOG4J2-3453](https://issues.apache.org/jira/browse/LOG4J2-3453)). In general 
the Configuration Builder API has many bugs such as this, because it is rarely 
used. Its main usage is the Java properties configuration format that nobody on 
the dev team uses.
   Thanks for auditing it.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@logging.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to