我想动态更改所有(大约)我的 Web 应用程序 Controller 类的日志记录级别。每个进行日志记录的类都包含以下代码:
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");
}
我的想法是有一个 Controller 方法来更改日志级别并可能将其存储在数据库中。我的问题是:如何优雅地解决这个问题,而无需复制并粘贴 40 多个文件中的所有内容并修改每个 Controller 方法?另请注意,记录器代码是静态的,而我的数据库访问不是静态的。
最佳答案
How I can solve this elegantly without copy and pasting everything in 40+ files and modifying every controller method?
您使用单个 Controller 方法,将记录器名称和所需的日志级别作为查询参数,并调用LogManager.getLogger(String name)
的字符串版本。 .
当然,保存到数据库并在重新启动时重新加载也是您需要完成的额外工作。
或者, Controller 可以更新启动时使用的 Log4j 配置文件,并强制 Log4j 在更改时重新加载它,例如通过调用 PropertyConfigurator.configure(String configFilename)
.
关于java - 动态更改日志记录级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43088774/