扩展 Log4j 以捕获日志参数

问题描述 投票:0回答:1

我的目标是在 Spring Boot 3 中扩展 log4j 以拦截日志参数并在自动记录时隐藏敏感数据。由于我很难找到解决方案,因此我打开并回答我自己的问题,希望对其他人有所帮助。

spring-boot log4j
1个回答
0
投票

添加依赖项

org.apache.logging.log4j:log4j-api:2.24.2

然后通过扩展

LogFactory
创建一个自定义
org.apache.logging.log4j.message.MessageFactory2
类并实现所有方法(是的,它们很多,但实现很容易)。示例:

class MyLogFactory : MessageFactory2 {

  override fun newMessage(charSequence: CharSequence?): Message {
    return charSequence?.let {
      ParameterizedMessage(it.toString())
    } ?: ParameterizedMessage("")
  }

  override fun newMessage(message: String?, p0: Any?): Message {
    return ParameterizedMessage(
      message,
      hideSensitiveData(arrayOf(p0))
    )
  }

  override fun newMessage(message: String?, p0: Any?, p1: Any?): Message {
    return ParameterizedMessage(
      message,
      hideSensitiveData(arrayOf(p0, p1))
    )
  }

  // and so on
}

然后在创建logger的时候,具体要使用自定义的LogFactory:

Logger log = LogManager.getLogger(MyCurrentClass.class, new MyLogFactory());

如果您希望对任何类默认使用自定义日志工厂,那么您可以通过在名为

log4j2.properties
的资源下定义一个文件来指定它:

log4j2.loggerFactory=com.example.MyLogFactory
© www.soinside.com 2019 - 2024. All rights reserved.