[英]Changing level of logging dynamically
我想動態更改所有(大約)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多個文件中並修改每個控制器方法? 還要注意,記錄器代碼是靜態的,而我的數據庫訪問不是靜態的。
我如何才能優雅地解決此問題,而無需將所有內容復制並粘貼到40多個文件中並修改每個控制器方法?
您使用單一控制器方法,將記錄器名稱和所需的日志級別作為查詢參數,然后調用LogManager.getLogger(String name)
的字符串版本。
當然,保存到數據庫並在重新啟動時重新加載當然是您需要做的額外工作。
或者,控制器可以更新啟動時使用的Log4j配置文件,並在更改Log4j時強制重新加載它,例如,通過調用PropertyConfigurator.configure(String configFilename)
。
您可以使用Slf4j並外部化application.properties文件。 您可以根據需要在此文件中配置日志記錄級別。
logging.level.com.test=DEBUG
logging.level.org=INFO
我不確定為什么您需要將此日志記錄級別存儲在數據庫中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.