在運行時中更改日志記錄級別很重要,這主要在生產環境中非常重要,在生產環境中,您可能希望在有限的時間內進行調試日志記錄。
好了,更改根記錄器非常簡單–假設您有一個具有所需記錄級別的輸入參數,只需獲取根記錄器并按輸入記錄級別進行設置,例如:
Logger root = Logger.getRootLogger();//setting the logging level according to input
if ('FATAL'.equalsIgnoreCase(logLevel)) {root.setLevel(Level.FATAL);
}else if ('ERROR'.equalsIgnoreCase(logLevel)) {root.setLevel(Level.ERROR);
}
但是,常見的情況是我們按類維護日志實例 ,例如:
class SomeClass{//class level logger
static Logger logger - Logger.getLogger(SomeClass.class);
}
僅設置根記錄器是不夠的,因為類記錄器不會受到影響。
訣竅是記住讓所有記錄器都進入系統并更改其記錄級別。
例如:
Logger root = Logger.getRootLogger();
Enumeration allLoggers = root.getLoggerRepository().getCurrentCategories();//set logging level of root and all logging instances in the system
if ('FATAL'.equalsIgnoreCase(logLevel)) {root.setLevel(Level.FATAL);while (allLoggers.hasMoreElements()){Category tmpLogger = (Category) allLoggers.nextElement();tmpLogger .setLevel(Level.FATALLogging, Enterprise Java, Log4j);}
}else if ('ERROR'.equalsIgnoreCase(logLevel)) {root.setLevel(Level.ERROR);while (allLoggers.hasMoreElements()){Category tmpLogger = (Category) allLoggers.nextElement();tmpLogger .setLevel(Level.ERROR);}
}
因此,只需將其包裝在服務類中,然后使用動態logLevel String參數從控制器中調用它即可,該參數代表您希望將系統設置為的日志記錄級別。
如果您需要完整的解決方案,請告訴我。
基本方法是在此鏈接中 。
參考: 如何在我們的JCG合作伙伴 Gal Levinsky的博客 Blog 上更改運行時的日志記錄級別 。
翻譯自: https://www.javacodegeeks.com/2012/07/how-to-change-logging-level-in-runtime.html