api 1.7 und slf4j-simple als implementierung. Ich kann einfach nicht herausfinden, wie die Protokollierungsstufe mit dieser Kombination konfiguriert werden kann.
Kann mir jemand helfen?
api 1.7 und slf4j-simple als implementierung. Ich kann einfach nicht herausfinden, wie die Protokollierungsstufe mit dieser Kombination konfiguriert werden kann.
Kann mir jemand helfen?
Antworten:
Es ist entweder durch Systemeigenschaft
-Dorg.slf4j.simpleLogger.defaultLogLevel=debug
oder simplelogger.properties
Datei auf dem Klassenpfad
Weitere Informationen finden Sie unter http://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html
defaultLogLevel
funktioniert es ( ). Ich habe gerade festgestellt, dass ich das Programm in einem falschen Ordner geändert habe ;-) Und es defaultlog
funktioniert nicht. Also möchten Sie wahrscheinlich Ihre Antwort bearbeiten, obwohl ich sie akzeptiert habe
Dies ist ein Beispiel, simplelogger.properties
das Sie in den Klassenpfad einfügen können (kommentieren Sie die Eigenschaften aus, die Sie verwenden möchten):
# SLF4J's SimpleLogger configuration file
# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
# Default logging detail level for all instances of SimpleLogger.
# Must be one of ("trace", "debug", "info", "warn", or "error").
# If not specified, defaults to "info".
#org.slf4j.simpleLogger.defaultLogLevel=info
# Logging detail level for a SimpleLogger instance named "xxxxx".
# Must be one of ("trace", "debug", "info", "warn", or "error").
# If not specified, the default logging detail level is used.
#org.slf4j.simpleLogger.log.xxxxx=
# Set to true if you want the current date and time to be included in output messages.
# Default is false, and will output the number of milliseconds elapsed since startup.
#org.slf4j.simpleLogger.showDateTime=false
# The date and time format to be used in the output messages.
# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
# If the format is not specified or is invalid, the default format is used.
# The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
#org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z
# Set to true if you want to output the current thread name.
# Defaults to true.
#org.slf4j.simpleLogger.showThreadName=true
# Set to true if you want the Logger instance name to be included in output messages.
# Defaults to true.
#org.slf4j.simpleLogger.showLogName=true
# Set to true if you want the last component of the name to be included in output messages.
# Defaults to false.
#org.slf4j.simpleLogger.showShortLogName=false
org.slf4j.simpleLogger.logFile
- Das Ausgabeziel, das der Pfad zu einer Datei sein kann, oder die speziellen Werte "System.out" und "System.err". Standard ist "System.err". Siehe slf4j.org/api/org/slf4j/impl/SimpleLogger.html
Sie können es programmgesteuert ändern, indem Sie die Systemeigenschaft festlegen:
public class App {
public static void main(String[] args) {
System.setProperty(org.slf4j.impl.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "TRACE");
final org.slf4j.Logger log = LoggerFactory.getLogger(App.class);
log.trace("trace");
log.debug("debug");
log.info("info");
log.warn("warning");
log.error("error");
}
}
Die Protokollebenen sind ERROR> WARN> INFO> DEBUG> TRACE.
Bitte beachten Sie, dass nach dem Erstellen des Loggers die Log-Ebene nicht mehr geändert werden kann. Wenn Sie die Protokollierungsstufe dynamisch ändern müssen, möchten Sie möglicherweise log4j mit SLF4J verwenden.
org.slf4j.impl.SimpleLogger
meinen Sie den tatsächlichen Quellcode und nicht das Dokument?
LOG_FILE_KEY
Eigenschaft auch nach dem Erstellen des Loggers nicht mehr geändert werden kann?
Mir ist aufgefallen, dass Eemuli gesagt hat, dass Sie die Protokollebene nach ihrer Erstellung nicht mehr ändern können - und obwohl dies das Design sein könnte, ist es nicht ganz richtig.
Ich bin auf eine Situation gestoßen, in der ich eine Bibliothek verwendet habe, die sich bei slf4j angemeldet hat - und ich habe die Bibliothek verwendet, während ich ein Maven-Mojo-Plugin geschrieben habe.
Maven verwendet eine (gehackte) Version des slf4j SimpleLogger, und ich konnte meinen Plugin-Code nicht dazu bringen, seine Protokollierung auf etwas wie log4j umzuleiten, das ich steuern konnte.
Und ich kann die Maven-Protokollierungskonfiguration nicht ändern.
Um einige verrauschte Info-Nachrichten zu beruhigen, stellte ich fest, dass ich eine solche Reflexion verwenden könnte, um zur Laufzeit mit dem SimpleLogger zu fummeln.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.spi.LocationAwareLogger;
try
{
Logger l = LoggerFactory.getLogger("full.classname.of.noisy.logger"); //This is actually a MavenSimpleLogger, but due to various classloader issues, can't work with the directly.
Field f = l.getClass().getSuperclass().getDeclaredField("currentLogLevel");
f.setAccessible(true);
f.set(l, LocationAwareLogger.WARN_INT);
}
catch (Exception e)
{
getLog().warn("Failed to reset the log level of " + loggerName + ", it will continue being noisy.", e);
}
Beachten Sie natürlich, dass dies keine sehr stabile / zuverlässige Lösung ist ... da sie beim nächsten Wechsel der Maven-Leute ihren Logger kaputt macht.