【问题标题】:How to get formatted LOGGER.warn result in java?如何在 java 中获取格式化的 LOGGER.warn 结果?
【发布时间】:2016-07-20 16:05:54
【问题描述】:

我的课堂上有几条日志消息

     LOGGER.warn("Ignore [{}] preference for user [{}] with id = [{}], value =[{}])",
                            preference.getUserPreferenceType(),
                            userService.findById(preference.getUserId()).getUserName(),
                            preference.getUserPreferenceId(),
                            preference.getValue()); 

我需要将格式化的消息放入地图。但它应该是格式化的值。因此,所有{} 都应替换为值。

我该怎么做?

【问题讨论】:

  • 什么放入地图?
  • @Sotirios Delimanolis 键 - 用户名、值列表错误消息
  • 你不能只用String.format吗?为什么要使用地图?
  • 单独生成消息,存储并记录。
  • @Sotirios Delimanolis 就我而言,我已经正确编写了错误消息

标签: java logging format log4j


【解决方案1】:

正如@f1sh 建议的那样,我认为您正在寻找类似的东西:

LOGGER.warn(String.format("First %d, Second %d, Third %d", var1, var2, var3)); 

【讨论】:

    【解决方案2】:

    通常这个占位符被日志框架或外观替换。看看SLF4J/LogbackLog4j 2 是否类似。出于性能原因,这是在日志记录中完成的。否则,您必须检查启用的日志级别,以避免可能对连接(或格式化)日志消息进行昂贵的 toString() 调用。

    只有旧式日志框架不支持这一点 - 如果可能,请不要再使用它们!

    【讨论】:

      【解决方案3】:

      我找到了解决办法:

       MessageFormatter.arrayFormat(oldFormatString, new Object[]{value1,value2...}).getMessage()
      

      【讨论】:

      • Log4j 1.x 已于 2015 年 8 月终止
      • @Arne Burmeister 世界上有很多老项目
      • 对,但你应该试试 Slf4j 包装器
      • @Arne Burmeister 我在我的项目中使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多