Comment configurer slf4j-simple

api 1.7 et slf4j-simple comme implémentation. Je n’arrive pas à trouver comment configurer le niveau de journalisation avec cette combinaison.

Quelqu’un peut-il aider?

C’est soit par propriété du système

-Dorg.slf4j.simpleLogger.defaultLogLevel=debug 

ou le fichier simplelogger.properties sur le classpath

voir http://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html pour plus de détails

Voici un exemple simplelogger.properties que vous pouvez placer sur le classpath (décommenter les propriétés que vous souhaitez utiliser):

 # 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 

Vous pouvez le modifier par programmation en définissant la propriété système:

 public class App { public static void main(Ssortingng[] 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"); } } 

Les niveaux de consignation sont ERROR> WARN> INFO> DEBUG> TRACE.

Veuillez noter qu’une fois le logger créé, le niveau de journalisation ne peut plus être modifié. Si vous devez modifier dynamicment le niveau de journalisation, vous pouvez utiliser log4j avec SLF4J.

J’ai remarqué qu’Eemuli a déclaré que vous ne pouvez pas modifier le niveau de journalisation après leur création – et même si cela peut être le design, ce n’est pas tout à fait vrai.

J’ai rencontré une situation dans laquelle j’utilisais une bibliothèque connectée à slf4j – et j’utilisais la bibliothèque lors de l’écriture d’un plugin maven mojo.

Maven utilise une version (piratée) du SimpleLogger slf4j, et je n’ai pas pu obtenir mon code de plug-in pour réacheminer sa connexion vers quelque chose comme log4j, que je pouvais contrôler.

Et je ne peux pas changer la configuration de maven logging.

Donc, pour calmer certains messages d’informations bruyants, j’ai trouvé que je pouvais utiliser une reflection comme celle-ci, avec Futur avec SimpleLogger.

 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); } 

Bien sûr, notez que ce n’est pas une solution très stable / fiable… car elle se brisera la prochaine fois que les développeurs changeront leur enregistreur.