Java 如何在log4j2中打印对象参数

Java 如何在log4j2中打印对象参数,java,log4j2,Java,Log4j2,我不熟悉log4j2。下面是一个场景 我跟踪如下 log.trace("some message",object); 现在我想使用控制台appender打印对象。我的附件看起来像这样 <Console name="Console"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> 但是,如果“对象”是实例Throwable

我不熟悉log4j2。下面是一个场景 我跟踪如下

log.trace("some message",object);
现在我想使用控制台appender打印对象。我的附件看起来像这样

<Console name="Console">
  <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
但是,如果“对象”是实例Throwable,它就可以正常工作,但对任何其他对象都不行。 请给我指出正确的方向

更新


似乎无法自定义将对象记录到与下面答案不同的字段。

Log4j2是一种记录解决方案。日志记录解决方案将文本消息写入附加程序——文件、标准输出、网络位置等。记录对象没有意义。如果您确实确定这是您想要做的,那么向您的对象添加一个有意义的
toString
,并记录它

log.trace("some message", object.toString());

如果您试图对对象进行序列化,则应采用不同的方法,因为Log4j2不是进行序列化的合适工具。

是否将对象打印为日志消息的一部分?那么就这样做:

log.trace("some message {}", object);
这实际上与:

log.trace("some message " + object);

但这更好,因为只有启用了所使用的级别(在本例中为跟踪)时(惰性计算),
字符串才会发生连接。

我有jdbc appender,我希望对象位于不同的列中,而不是消息的一部分。所以我想我可以在第二个参数中传递它,因为它接受对象作为输入,并且我在apache站点中读到它使用toString实现转换为String。在本例中,我为类实现了serializable接口。Log4j为您提供了一些选择。你可以使用上面所示的方法,如果你的对象没有实现一个好的toString方法,你可以创建自己的消息实现来格式化对象并执行logger.trace(newmyobjectmessage(object))@SabareeshKkanan方法接受
对象
作为第二个参数,以避免在特定级别禁用记录器时创建多余的对象,正如我在回答中所述。你应该看报纸。没有提供添加新列以表示对象的选项。您所能做的就是将对象添加到消息中。此答案仅适用于除了log4j之外还使用slf4j的情况?他错过了消息
字符串中的
{}
log.trace("some message " + object);