Risposte:
È tramite la proprietà di sistema
-Dorg.slf4j.simpleLogger.defaultLogLevel=debug
o simplelogger.properties
file sul percorso di classe
vedi http://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html per i dettagli
defaultLogLevel
). Ho appena scoperto che stavo modificando il programma in una cartella sbagliata ;-) E defaultlog
non funziona. Quindi probabilmente vuoi modificare la tua risposta anche se l'ho accettata
Questo è un esempio simplelogger.properties
che puoi posizionare sul classpath (decommenta le proprietà che desideri utilizzare):
# 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
- La destinazione di output che può essere il percorso di un file o i valori speciali "System.out" e "System.err". L'impostazione predefinita è "System.err". Vedi slf4j.org/api/org/slf4j/impl/SimpleLogger.html
È possibile modificarlo programmaticamente impostando la proprietà di sistema:
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");
}
}
I livelli di registro sono ERRORE> AVVISO> INFO> DEBUG> TRACE.
Si noti che una volta creato il logger non è possibile modificare il livello di registro. Se è necessario modificare dinamicamente il livello di registrazione, è possibile utilizzare log4j con SLF4J.
org.slf4j.impl.SimpleLogger
Intendi il vero codice sorgente piuttosto che doc?
LOG_FILE_KEY
proprietà non può essere modificata neanche una volta creato il logger?
Ho notato che Eemuli ha detto che non è possibile modificare il livello del registro dopo che sono stati creati - e mentre quello potrebbe essere il design, non è del tutto vero.
Mi sono imbattuto in una situazione in cui stavo usando una libreria che si registrava su slf4j - e stavo usando la libreria mentre scrivevo un plugin maven mojo.
Maven utilizza una versione (compromessa) di SimpleLogger slf4j e non sono riuscito a ottenere il mio codice plugin per reindirizzare la sua registrazione su qualcosa come log4j, che potevo controllare.
E non posso cambiare la configurazione di registrazione di Maven.
Quindi, per calmare alcuni messaggi informativi rumorosi, ho scoperto che avrei potuto usare la riflessione in questo modo, per andare a vuoto con il SimpleLogger in fase di esecuzione.
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);
}
Naturalmente, nota, questa non è una soluzione molto stabile / affidabile ... in quanto si romperà la prossima volta che i malvagi cambieranno il loro logger.