簡體   English   中英

動態更改日志記錄級別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM