Ich möchte die Protokollierungsstufe für alle (über) meiner Webanwendung Controller-Klassen dynamisch ändern. Jede Klasse, die Protokollierung bietet enthält diesen Code:Ändern der Ebene der Protokollierung dynamisch
private static final Logger logger = LoggerFactory
.getLogger(HomeController.class);
ich gelernt, dass slf4j nicht die Funktionalität eines Protokollebene eingestellt, so bieten, so dass man die zugrunde liegenden log4j verwenden muss:
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");
}
Meine Idee ist, eine Controller-Methode zu haben, die den logLevel ändert und ihn möglicherweise in der Datenbank speichert. Meine Frage ist: Wie kann ich das elegant lösen, ohne alles in 40+ Dateien kopieren und einfügen zu müssen und jede Controller-Methode zu modifizieren? Beachten Sie auch, dass der Loggercode statisch ist, während der Datenbankzugriff nicht statisch ist.
Ich bin unsicher über den Lebenszyklus von Log4J, gibt es eine einzige Instanz für alle Tomcat-Anfragen oder wird der Logger für jede Anforderung neu erstellt, die ihn benötigt? – Adder
Es gibt eine einzelne Instanz von Log4j in Ihrer Webanwendung, vorausgesetzt, Sie haben 'log4j.jar' (und alle notwendigen' slf4j.jar' Dateien) zum Ordner 'WEB-INF/lib' hinzugefügt. – Andreas
Also konnte ich einfach: 'setLogLevel (" INFO ")' und es würde alle zukünftigen Anfragen und Jobs, die ich habe, beeinflussen? – Adder