1

我有以下代码:

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

我希望将严重性设置为WARNor FATAL

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

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

4

2 回答 2

3

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

要执行您想做的事情,您需要更改代码以调用以 Level 作为参数的 Logger 方法,并替换守卫;例如

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

而且我认为这不会有帮助,因为你会遇到将正确的值放入该level变量的问题。

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

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

于 2011-06-08T10:07:12.713 回答
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);
于 2011-06-08T10:10:04.400 回答