Wir haben einen Webserver und mehrere Benutzer loggen sich ein. Wir setzen den Loglevel normalerweise auf ERROR oder INFO Level. Aber manchmal müssen wir zu Debugging-Zwecken Protokolle anzeigen. Es gibt one way, um es zur Laufzeit einzustellen, aber dieser Prozess ist nicht so gut im Falle von viel Verkehr. Wichtige Logs werden vermisst und wir wissen auch nicht wie viel Zeit wir dafür aufwenden müssen. Ich habe einen Wrapper in log4j v1.2 geschrieben, der einfach die Level-Prüfung ignoriert, wenn Benutzerid zu einer TestUsersList gehört. Also, es öffnet nur alle Protokolle für einen bestimmten Benutzer [ein Thread]. Ein Ausschnitt ist unten-Log4j2, Loglevel zur Laufzeit für Thread-spezifisch einstellen
public void trace(Object message) {
Object diagValue = MDC.get(LoggerConstants.IS_ANALYZER_NUMBER);
if (valueToMatch.equals(diagValue)) { // Some condition to check test number
forcedLog(FQCN, Level.TRACE, message, null);
return;
}
if (repository.isDisabled(Level.TRACE_INT))
return;
if (Level.TRACE.isGreaterOrEqual(this.getEffectiveLevel()))
forcedLog(FQCN, Level.TRACE, message, null);
}
Aber jetzt habe ich ziehe nach log4j2, ich will nicht diesen Wrapper wieder schreiben. Gibt es eine eingebaute Funktionalität, die log4j2 dafür bereitstellt?