SLF4J日志级别作为参数

mar*_*aos 14 java logging slf4j

我们希望使用SLF4J,但我们发现的一件事是你不能将关卡指定为参数,即

Logger.log(Level.INFO, "messsage");
Run Code Online (Sandbox Code Playgroud)

你必须这样做

logger.info("message");
Run Code Online (Sandbox Code Playgroud)

这可以防止能够通过方法传递所有内容,因此您可以将其他属性添加到类中的所有日志消息.

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用SLF4j实现这一目标?

Sta*_*key 9

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

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

  • 怎么没有 `log(Level level, ...)` 方法? (3认同)

Rag*_*ram 6

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