Hi all,

Configuration problems in our builders are handled in multiple ways:

1. Sometimes we call `LOGGER.error` and return `null`.

2. Sometimes we throw an explicit exception. The types of exceptions vary: NPE, IllegalArgumentException, IllegalStateException, etc. There is a `o.a.l.l.core.config.ConfigurationException`, but it doesn't seem to be used often.

3. Sometimes exceptions, usually NPEs, are thrown by the constructor of a plugin. Most of the time I consider these bugs.

Could we agree on a preferred way to signal configuration errors? I don't plan to modify the behavior of old code, but we should apply a consistent strategy on new builders.

I do like throwing exceptions, which often simplifies flow control, but when I started working on Log4j, I was told 1. was the way to go.

On a related matter, Ralph said on Slack that:

> Failure during configuration should be caught and cause the previous configuration to remain intact.

While I agree with this "all-or-nothing" strategy, this is not the way it currently works. Regardless of the strategy chosen to communicate the problem, a misconfigured component will simply be omitted. This can cause problems down the line, like:

2025-03-03T11:49:26.081922076Z main ERROR RollingFileAppender 'ROLLING': When no file name is provided a DirectFileRolloverStrategy must be configured 2025-03-03T11:49:26.082046726Z main ERROR Null object returned for RollingFile in Appenders. 2025-03-03T11:49:26.083912635Z main ERROR Unable to locate appender "ROLLING" for logger config "root"

However, these problems are not fatal and the configuration replaces the previous one.

What do you think?

Piotr

Reply via email to