将供应商与普通对象一起传递给 log4j2 不会编译

Passing a supplier to log4j2 along with normal objects doesn't compile

我正在使用 log4j 2.4.1,它应该支持 lambda 表达式。

所以我正在编写这个无法编译的调用。

logger.trace("{}{}", "foo", ()->"bar");

然而,以下两行工作正常:

logger.trace("{}{}", "foo", "bar");
logger.trace("{}{}", ()->"foo", ()->"bar");

我只是不明白为什么我不能在这里将 Supplier 作为对象传递...

是什么导致无法编译,我应该向 log4j 团队提出什么建议来解决这个问题?

编译错误如下:

no suitable method found for trace(java.lang.String,java.lang.String,()->"bar")

Logger上可用的相关方法是:

...
trace(String, Object...); // all parameters are non-lambda Objects
trace(String, Supplier<?>...); // all parameters are lambda expressions
...

这意味着您可以传递任何(非 lambda)对象的一个​​或多个参数,或者您可以传递一个或多个 lambda 表达式作为参数。

为了支持您的想法,需要将以下方法添加到 Logger 接口:

 // support one Object param followed by one or more lambda expressions
 trace(String, Object, Supplier<?>...);

但是,这只会对 logger.trace("{}{}", "foo", ()->"bar") 有帮助,对 logger.trace("{}{}{}", "foo", ()->"bar", "xxx").

这样的事情没有帮助

我认为不可能以通用方式支持对象参数和 lambda 表达式参数的任意混合。