【问题标题】:Log4j2: How to print all object parameters in logLog4j2:如何打印日志中的所有对象参数
【发布时间】: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 文档 MessagesLayout Patterns 中找到它

【问题讨论】:

  • 你为什么不简单地使用 + 运算符?
  • 这是一种动态方法:Arrays.toString(Arrays.asList(1, 2, 3, "anything else").toArray());
  • 如果您使用上述任何一种解决方案,请注意,这将在 CPU 上花费一些时间进行一些字符串操作,即使记录器配置为不打印日志级别信息也是如此。如果这样做,您应该使用logger.isInfoEnabled() 封装您的呼叫
  • @tejoe 感谢您回答上述问题。详细说明:在调用 log 方法之前将创建 StringBuffer 对象并构建字符串。即使禁用了日志记录,日志语句也会影响性能。它也在javadoc中。问题很明显,然后反编译了一个类文件。

标签: java logging configuration log4j log4j2


【解决方案1】:

请在 Log4j2 Jira 问题跟踪器上提出功能请求。

两个考虑: 1. 实现必须在提供的额外参数之间添加空格。 2. 需要注意不要破坏提取任何最后一个 Throwable 参数的现有逻辑。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-04-20
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2014-04-08
  • 2018-01-16
相关资源
最近更新 更多