java - 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"
解决方案
这看起来像所示代码中的一个错误:这个方法/构造函数接受一个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
推荐阅读
- php - “未定义索引:名称” Laravel 5.7 控制器
- python - 如何将 yticks 添加到 pyplot 中的一个特定点?
- sql-server - 设置从某个值开始的自动增量值 T-SQL
- mysql - Drupal - PDOException:SQLSTATE [42S02]
- java - java- SDK 版本和 Vm 选项
- java - 为什么 outputStream 没有 inputStream 就不能工作?
- arrays - 从数组中删除重复的内容
- c++ - 重新加载矩阵的运算符,但不会更改以前的矩阵
- pyspark - 解析jsons pyspark的字符串
- postgresql - Express Vue 未创建关联,userId 为空