首页 > 解决方案 > 有没有办法根据日志的内容更改日志的级别?

问题描述

我正在使用 Logback 进行日志记录,在我的代码的几个地方,我有如下内容:

  if(message.contains("kitten")) {
    logger.info(message);
  } else if (message.contains("wolf")) {
    logger.error(message);
  }  else if(message.contains("chuck norris")) {
    logger.fatal(message);
  } else  {
    logger.warn(message);
  }

(大多数时候消息来自外部系统)

有没有更丑陋的方法?

标签: javalogbacklogback-classic

解决方案


由于您使用 logback 作为后端,并且您没有指定您正在使用的日志记录 API,我假设您使用的是 slf4j(logback 的本机 API)。不幸的是,这个 API 并不像人们希望的那样灵活。例如,log4j 2Logger.log需要 a Level,然后您可以像这样使用它:

logger.log(levelFor(message), message);
...
private Level levelFor(String message) {
    if (message.contains("kitten"))
        return Level.INFO;
    else if...
        return...
}

不幸的是,slf4j 没有Logger.log方法。您可以使用 log4j2 作为您的 API,并使用适当的 jar 依赖项将其桥接到您的 logback 后端。


推荐阅读