我有以下代码:
private static final Log LOGGER = LogFactory.getLog(MyClass.class);
if (LOGGER.isErrorEnabled()) {
LOGGER.error("ID_1: Log Message: " + parameter));
}
我希望将严重性设置为WARN
或FATAL
。
如果我能够在运行时更新log4j.properties,那么我该如何更改此消息的严重性?使用log4j.logger.com.foo=WARN
只会更改整个包的严重性。
有没有办法更具体? 我们可以在运行时更改单个日志记录语句的日志记录级别吗?
答案 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);