我们可以在运行时更改单个日志语句的日志记录级别吗?

时间:2011-06-08 10:04:28

标签: java log4j apache-commons-logging

我有以下代码:

private static final Log LOGGER = LogFactory.getLog(MyClass.class);
if (LOGGER.isErrorEnabled()) {
    LOGGER.error("ID_1: Log Message: " + parameter));
}

我希望将严重性设置为WARNFATAL

如果我能够在运行时更新log4j.properties,那么我该如何更改此消息的严重性?使用log4j.logger.com.foo=WARN只会更改整个包的严重性。

有没有办法更具体? 我们可以在运行时更改单个日志记录语句的日志记录级别吗?

2 个答案:

答案 0 :(得分:3)

简短的回答是不,你不能。

要执行您想要执行的操作,您需要更改代码以调用以Level作为参数的Logger方法,并替换guard; e.g。

if (logger.isEnabledFor(level)) {
    logger.log(level, "ID_1: Log Message: " + parameter, null);
}

我不认为这会有所帮助,因为你的问题是在level变量中得到正确的值。

更好的选择是创建一个具有唯一名称的记录器,并且仅在该特定语句中使用。然后,您可以独立于任何其他语句控制该语句的日志记录(通过日志记录配置)。

或者,更现实地说,使用类名或包名来命名记录器。这为您提供了比单个全局记录器更多的粒度......而无需创建疯狂数量的Logger实例。

答案 1 :(得分:0)

您可以在使用Log4j和log-methods时指定LogLevel,它将LogLevel作为参数:

Logger l = Logger.getLogger(this.getClass());
l.log(Level.WARN, message);
l.log(Level.ERROR, message);
l.log(Level.ERROR, message, throwable);