我想动态更改所有(大约)我的Web应用程序控制器类的日志记录级别。每个进行日志类包含此代码:动态更改日志记录级别
private static final Logger logger = LoggerFactory
.getLogger(HomeController.class);
我了解到,SLF4J不提供设置日志级别的功能,使人们必须使用底层的log4j:
public static void setLogLevel(String level) {
org.apache.log4j.Logger logger4j = org.apache.log4j.Logger.getRootLogger();
logger4j.setLevel(org.apache.log4j.Level.toLevel(level.toUpperCase()));
logger.info("Sample Info After setLevel");
logger.debug("Sample Debug After setLevel");
logger.error("Sample Error After setLevel");
logger.trace("Sample Trace After setLevel");
logger.warn("Sample Warn After setLevel");
}
我想法是有一个控制器方法,它可以改变logLevel并将其存储在数据库中。我的问题是:如何在不复制和粘贴40多个文件中的所有内容并修改每个控制器方法的情况下如何优雅地解决此问题?还要注意,记录器代码是静态的,而我的数据库访问不是静态的。
我不确定关于Log4J的生命周期,所有tomcat请求是否存在单个实例,或者是否为每个需要它的请求重新创建了日志记录器? – Adder
假设您在'WEB-INF/lib'文件夹中添加了'log4j.jar'(以及所有必需的'slf4j.jar'文件),您的webapp中只有一个Log4j实例。 – Andreas
所以我可以这样做:'setLogLevel(“INFO”)'它会影响我所有未来的请求和工作? – Adder