SLF4J 日志级别作为参数

2022-09-03 13:46:37

我们希望使用SLF4J,但我们发现的一件事是,您无法将级别指定为参数,即

Logger.log(Level.INFO, "messsage");

你必须这样做

logger.info("message");

这阻止了通过方法传递所有内容,因此您可以将其他属性附加到类中的所有日志消息。

public class Test
{
    public Test(SomeObj obj)
    {
       log(Level.INFO, "message");
    }

    public void anotherMethod()
    {
       log(Level.DEBUG, "another message");
    }
    private void log(Level level, String message)
    {
        logger.log(level, message + obj.someString());
    }
}

有没有办法使用SLF4j来实现这一点?


答案 1

围绕 slf4j 调用编写一个包装器,并为六个日志级别创建自己的枚举。然后在包装器中,使用开关调用正确的 slf4j 调用。

void myLog(Level level, String message)
{
  switch (level)
  {
  case FATAL:
    log.fatal(message);
    break;
  case ERROR:
    log.error(message);
    break;
  ....
  }
}

答案 2

答案是否定的。请参阅此讨论


推荐