【发布时间】:2016-03-31 11:07:57
【问题描述】:
我想在 Log4J2 中打印所有对象参数作为日志消息的一部分。例如,如果我打电话
logger.info("Hello World 3", true, false, "'3 object params means we invoke ... method'");
结果是只记录了以下内容
你好世界 3
我想要类似的东西
Hello World 3 true false '3 object params 表示我们调用 ... 方法'
我能做到
logger.info("Hello World 3 {} {} {}", true, false, "'3 object params means we invoke ... method'");
但是我必须记住添加正确数量的 {}。我还使用其他日志框架中的正则表达式重构了代码,所以我有很多语句看起来像第一个带有对象参数但不是 {} 的语句。
添加 * 或 [] 是否可以更改消息?我无法在 Log4j2 文档 Messages 或 Layout Patterns 中找到它
【问题讨论】:
-
你为什么不简单地使用 + 运算符?
-
这是一种动态方法:
Arrays.toString(Arrays.asList(1, 2, 3, "anything else").toArray()); -
如果您使用上述任何一种解决方案,请注意,这将在 CPU 上花费一些时间进行一些字符串操作,即使记录器配置为不打印日志级别信息也是如此。如果这样做,您应该使用
logger.isInfoEnabled()封装您的呼叫 -
@tejoe 感谢您回答上述问题。详细说明:在调用 log 方法之前将创建 StringBuffer 对象并构建字符串。即使禁用了日志记录,日志语句也会影响性能。它也在javadoc中。问题很明显,然后反编译了一个类文件。
标签: java logging configuration log4j log4j2