Hi Jay,

On 23.01.2025 06:15, Jay Katariya wrote:
Before I start the discussion here, I want to mention I am a Log4j newbie
contributor, and don't know feature requests etc work, and what is a good
feature vs what is not a good feature to take into account.

The main question you have to ask yourself is: are you willing to support the feature for 5 or 10 years? How many users will the feature have? A great examples of the maintenance problems you can encounter is the NetRexxC task[1] in Apache Ant. Nobody is using it, its dependencies are not available on Maven Central, but the Apache Ant team has been maintaining it for around 25 years.

Note that as a rule we don't drop features. If possible we add a configuration option to disable a feature and (possibly) disable the feature by default. There is however a thin line between features and bugs, so the bug reported in LOG4J2-905[2] was initially classified as feature, but ended being one of worst bugs of all times.

The problem with many features is that they might initially look great, but they can age poorly. The user that requested them might realize after a couple of months that there is a better and more standard way to achieve the same result. This is why currently we follow this procedure:

1. Unless there is a consensus that a feature will be a popular one, additional Log4j components are created as personal/company projects first. Personally I also have one project in this phase too[3]. Feel free to ask other Log4j committers to review the code and mention the component in our documentation. For legal reasons the component must be in a "Third-party components" section like we did for lookups[4]. We should probably also announce these plugins on our social media.

2. If you see that the project becomes popular (GitHub stars, issue reports, etc.) submit it as PR to Log4j. In my experience if a code is not used enough, it is buggy. An issue report or feature request is an indication that someone tested your code (maybe even in production). Some companies have a policy against single-maintainer projects, for example they refused to use Eduard's Log4j plugin descriptor merger[4] until it became an official Log4j module.

Piotr

[1] https://ant.apache.org/manual/Tasks/netrexxc.html

[2] https://issues.apache.org/jira/browse/LOG4J2-905

[3] https://oss.copernik.eu/#ramp-up

[4] https://logging.apache.org/log4j/2.x/manual/lookups.html#third-party

[4] https://github.com/edwgiz/maven-shaded-log4j-transformer?tab=readme-ov-file

Reply via email to