Hi Ɓukasz,

On Sat, 11 Mar 2023 at 10:36, Lukasz Lenart <lukaszlen...@apache.org> wrote:
> Is it possible to unpack Optional parameters?

Yes and no: the default message factories [1] and [2] do treat
`Optional` parameter as any other `Object` parameter.

In your case:

LOG.info("Detected container provider [{}] needs to be reloaded.", provider);

creates a `ParameterizeMessage` with a parameter of `provider`.
`provider` will be serialized as `provider.toString()`, not
`provider.get().toString()`.

You can write your own `MessageFactory` that calls `Optional.get()` if
the parameter is of type `Optional`. To replace the default message
factory with your custom version, set the "log4j2.messageFactory" to
the fully-qualified class name of the factory.

However I don't believe that this is the right way to go: IIRC
`Optional.isPresent()` and `Optional.get()` should be replaced with a
single call to `Optional.ifPresent()` whenever possible:

provider.ifPresent(p -> {
    LOG.info("Detected container provider [{}] needs to be reloaded.", p);
});

[1] 
https://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/message/ParameterizedMessageFactory.html
[2] 
https://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/message/ReusableMessageFactory.html

Reply via email to