我想動態更改所有(大約)我的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