首页 > 解决方案 > log4j2 StringMapMessage 无法获取自定义消息

问题描述

这是我的 StringMapMessage :

object Messages {

final case class SimpleMapMessage(id: String, ai: String, runtime: Long, msg: String) extends StringMapMessage {
   put("id", id)
   put("ai", ai)
   put("runtime", String.valueOf(runtime / (1000 * 1000.0)))

 override def formatTo(buffer: lang.StringBuilder): Unit = 
    buffer.append(msg)
 }

 def event(event: ChartEvent, message: String): Message = {
   val context = event.context
   val runtime = System.nanoTime() - event.started
   SimpleMapMessage(context.id, context.ai, runtime, message)
 }
}

案例类:

case class ChartEvent(...)

在这里我可以称之为:

logger.info(Messages.event(event, "test something"))

但我得到了这个:

 ... ai="0a1b4118dd954ec3bcc69da5138bdb96" id="fa507bd79f6adf308aedcb7f1daef8c7" runtime="298.690142"

我无法收到“测试某些东西”的消息

更新:

它在2.8.2版本中运行良好。但在2.11.1版本失败

完整的日志在这里:

2018-08-21 02:59:34.988 [INFO] ${map:id} ${map:ai} ${map:runtime} from  classA - ai="0a1b4118dd954ec3bcc69da5138bdb96" id="72f8ec5a1a3073b213d094127aca94c4" runtime="137.950475"

标签: javalog4j2

解决方案


这看起来像所示代码中的一个错误:这个方法/构造函数接受一个msg: String参数,但不做任何事情,所以它只是被丢弃了......

final case class SimpleMapMessage(
      id: String, 
      ai: String, 
      runtime: Long, 
      msg: String)
   put("id", id)
   put("ai", ai)
   put("runtime", ...
  // need to put msg String also

推荐阅读