Yanıtlar:
Ya sistem özelliği ile
-Dorg.slf4j.simpleLogger.defaultLogLevel=debug
veya simplelogger.properties
sınıf yolundaki dosya
bkz http://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html detaylar için
defaultLogLevel
) çalışır.Yanlış bir klasörde programı değiştirdiğimi buldum ;-) Ve defaultlog
çalışmıyor. Bu yüzden muhtemelen cevabınızı kabul
Bu, simplelogger.properties
sınıfyoluna yerleştirebileceğiniz bir örnektir (kullanmak istediğiniz özellikleri açın):
# 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
- Bir dosyanın yolu veya "System.out" ve "System.err" özel değerleri olabilecek çıktı hedefi. Varsayılan "System.err" dir. Bkz. Slf4j.org/api/org/slf4j/impl/SimpleLogger.html
System özelliğini ayarlayarak programlı olarak değiştirebilirsiniz:
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");
}
}
Günlük düzeyleri HATA> WARN> INFO> DEBUG> TRACE şeklindedir.
Kaydedici oluşturulduktan sonra günlük seviyesinin değiştirilemeyeceğini lütfen unutmayın. Dinamik günlük düzeyini değiştirmek gerekirse kullanmak isteyebilirsiniz log4j SLF4J ile.
org.slf4j.impl.SimpleLogger
mu demek istediniz: doc yerine asıl kaynak kodu?
LOG_FILE_KEY
, günlükçü oluşturulduktan sonra özelliğin değiştirilemeyeceği de doğru mu?
Eemuli'nin oluşturulduktan sonra günlük düzeyini değiştiremeyeceğinizi söylediğini fark ettim - ve bu tasarım olsa da, tamamen doğru değil.
Slf4j'ye giriş yapan bir kütüphane kullandığım bir durumla karşılaştım ve bir maven mojo eklentisi yazarken kütüphaneyi kullanıyordum.
Maven slf4j SimpleLogger'ın (saldırıya uğramış) bir sürümünü kullanıyor ve günlük kaydını kontrol edebileceğim log4j gibi bir şeye yeniden yönlendirmek için eklenti kodumu alamadım.
Ve maven günlük yapılandırmasını değiştiremiyorum.
Bu nedenle, bazı gürültülü bilgi mesajlarını susturmak için, çalışma zamanında SimpleLogger ile futz yapmak için böyle bir yansımayı kullanabileceğimi buldum.
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);
}
Tabii ki, bunun çok istikrarlı / güvenilir bir çözüm olmadığını unutmayın ... çünkü maven millet kaydedicilerini bir sonraki değiştirişinde kırılacaktır.