使用slf4j给每个日志消息添加静态前缀

3
有没有一种方法可以在使用slf4j时将静态(非上下文动态)前缀添加到所有日志消息中,而不更改底层日志框架的格式?需要明确的是,这意味着不能使用MDC,因为这需要反映在底层框架的格式配置中。是否有其他选项来创建slf4j记录器的自定义包装器,并在我通常只需初始化slf4j记录器的任何地方使用它?
public class CustomLogger {

  private final String prefix = "custom-prefix";

  private final Logger logger;

  public CustomLogger(Class clazz) {
    logger = LoggerFactory.getLogger(clazz);
  }

  public void info(String info) {
    logger.info (prefix + info);
  }

  // other methods...

}

如果需要一些背景信息:我正在一个核心应用程序上运行多个插件的环境中工作。在这样的插件中,我想将插件的名称作为前缀添加到已记录的消息中。

虽然时间过去了一些,但我仍然遇到了同样的问题,并发现这个邮件列表条目非常有帮助:http://mailman.qos.ch/pipermail/slf4j-user/2013-May/001343.html - Dave
1个回答

0
将您的调用包装在另一个方法中,该方法对传入的字符串执行String.format(...)。您的格式化程序将具有静态字符串,并将在实际记录器方法之前、之中或之后的某个位置放置记录字符串,然后将其传递给实际记录器方法。

所以基本上您建议使用如上所示的包装器?字符串连接与String.format(...)之间的问题是实现细节 - 我关心的是使用包装器类是否是强制使用slf4j前缀的“正确方法”。 - thee
包装方法比在日志模式中硬编码更灵活,这是您的另一种选择。如果您在代码中定义记录器和附加程序以及所有记录器属性(而不仅仅是重新配置默认记录器),您也可以在那里执行此操作。最终,字符串需要出现在您的模式或传递给日志记录方法的字符串中。 - user1531971

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接