Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AbstractConfiguration clears Configuration name if some conditions are met (i.e. no defined loggers) #3431

Open
JWT007 opened this issue Feb 3, 2025 · 2 comments · May be fixed by #3454
Open

Comments

@JWT007
Copy link
Contributor

JWT007 commented Feb 3, 2025

Log4j 2.24.3 - AbstractConfiguration

If I create a BuiltConfiguration that defines a Configuration 'name' (i.e. "FooBar") and no loggers, the AbstractConfigurat#doConfigure() method calls the setToDefault() method for example if the following conditions are met:

  • no loggers are defined
  • no root logger is defined

For example,

if (!setLoggers) {
  LOGGER.warn("No Loggers were configured, using default. Is the Loggers element missing?");
  setToDefault();
  return;
}

The first thing the setToDefault method does is clear the given name and replace it with a default.

protected void setToDefault() {
        // LOG4J2-1176 facilitate memory leak investigation
        setName(DefaultConfiguration.DEFAULT_NAME + "@" + Integer.toHexString(hashCode()));
       ...
}

It should however (IMHO) be a perfectly valid scenario to create a configuration with no content but with a custom name - specifically where I discovered this in testing. But maybe I want to only define global filters and otherwise rely on default behaviour.

In my opinion the name should only be set here if no name has yet been set.

Generally it should be OK to set a configuration with no loggers and no root logger. Consider a CompositeConfiguration named "FooBar" with an initially empty BuiltConfiguration. Some runtime event might create appenders and loggers dynamically (ie. for a new service). But it is no longer possible to lookup that configuration by name because a default has been applied.

NOTE: The referenced bug/fix (https://issues.apache.org/jira/browse/LOG4J2-1176) doesn't seem to make any mention of the name being a problem.

@JWT007
Copy link
Contributor Author

JWT007 commented Feb 11, 2025

@ppkarwasz - trying to take care of some of my many small bug reports - created a PR for this issue.

Under the assumption that the above mentioned change for LOG4J-1176 was only added to ensure that a configuration gets a default name for testing the fix, I wrapped it so that the default name is only set if no name has already been set.

@ppkarwasz
Copy link
Contributor

Thanks a lot!

I will have some time next week to look at the open PRs.

JWT007 pushed a commit to JWT007/logging-log4j2 that referenced this issue Feb 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants