SLF4J - Hata Mesajları
Bu bölümde, SLF4J ile çalışırken aldığımız çeşitli hata mesajlarını veya uyarıları ve bu mesajların nedenlerini / anlamlarını tartışacağız.
"Org.slf4j.impl.StaticLoggerBinder" sınıfı yüklenemedi.
Bu, sınıf yolunda sağlanan SLF4J bağlamaları olmadığında ortaya çıkan bir uyarıdır.
Tam uyarı aşağıdadır -
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further
details.
Bunu çözmek için günlük çerçevesi bağlamalarından birini eklemeniz gerekir. Bu,Hello world Bu öğreticinin bölümü.
Note - Bu, SLF4J'nin 1.6.0 ile 1.8.0-beta2 arasındaki sürümlerinde görülür.
SLF4J sağlayıcısı bulunamadı
Slf4j-1.8.0-beta2'de, yukarıdaki uyarı daha nettir “No SLF4J providers were found”.
Tam uyarı aşağıdadır -
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
Classpath, 1.8'den önceki slf4j-api sürümlerini hedefleyen SLF4J bağlamaları içerir
SLF4J 1.8 sürümünü kullanıyorsanız ve sınıf yolunda önceki sürümlerin bağlantılarına sahipseniz ancak 1.8'in bağlamalarına sahip değilseniz, aşağıda gösterildiği gibi bir uyarı göreceksiniz.
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions prior to
1.8.
SLF4J: Ignoring binding found at
[jar:file:/C:/Users/Tutorialspoint/Desktop/Latest%20Tutorials/SLF4J%20Tutorial/
slf4j-1.7.25/slf4j-jdk14-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#ignoredBindings for an explanation.
NoClassDefFoundError: org / apache / commons / logging / LogFactory
İle çalışıyorsanız slf4j-jcl ve eğer sadece sahipsen slf4j-jcl.jar sınıf yolunuzda, aşağıda verilen gibi bir istisna alacaksınız.
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/logging/LogFactory
at org.slf4j.impl.JCLLoggerFactory.getLogger(JCLLoggerFactory.java:77)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
at SLF4JExample.main(SLF4JExample.java:8)
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.logging.LogFactory
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 3 more
Bunu çözmek için eklemeniz gerekir commons-logging.jar sınıf yolunuza.
Hem jcl-over-slf4j.jar hem de sınıf yolunda slf4j-jcl.jar bağlandı ..
Bağlayıcı slf4j-jcl.jar slf4j logger'ın çağrılarını JCL'ye ve jcl-over-slf4j.jarJCL logger çağrılarını slf4j'ye yönlendirir. Bu nedenle, projenizin sınıf yolunda ikisine birden sahip olamazsınız. Bunu yaparsanız, aşağıda verilen gibi bir istisna elde edersiniz.
SLF4J: Detected both jcl-over-slf4j.jar AND bound slf4j-jcl.jar on the class
path, preempting StackOverflowError.
SLF4J: See also http://www.slf4j.org/codes.html#jclDelegationLoop for more
details.
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:71)
at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:42)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
at SLF4JExample.main(SLF4JExample.java:8)
Caused by: java.lang.IllegalStateException: Detected both jcl-over-slf4j.jar
AND bound slf4j-jcl.jar on the class path, preempting StackOverflowError. See
also http://www.slf4j.org/codes.html#jclDelegationLoop for more details.
at org.slf4j.impl.JCLLoggerFactory.<clinit>(JCLLoggerFactory.java:54)
... 7 more
Bunu çözmek için jar dosyalarından birini silin.
Kaydedici adı uyuşmazlığı algılandı
Bir Logger nesnesi oluşturabilirsiniz -
Bir argüman olarak oluşturulacak günlük kaydedicinin adını getLogger() yöntem.
Bu yönteme argüman olarak bir sınıf geçirme.
Bir sınıfı argüman olarak ileterek günlükçü fabrika nesnesini oluşturmaya çalışıyorsanız ve sistem özelliğini ayarladıysanız slf4j.detectLoggerNameMismatch true, sonra argüman olarak ilettiğiniz sınıfın adı getLogger() yöntem ve kullandığınız sınıf aynı olmalıdır, aksi takdirde aşağıdaki uyarıyı alırsınız -
"Kaydedici adı uyuşmazlığı algılandı.
Aşağıdaki örneği düşünün.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SLF4JExample {
public static void main(String[] args) {
System.setProperty("slf4j.detectLoggerNameMismatch", "true");
//Creating the Logger object
Logger logger = LoggerFactory.getLogger(Sample.class);
//Logging the information
logger.info("Hi Welcome to Tutorilspoint");
}
}
Burada slf4j.detectLoggerNameMismatch özelliğini true olarak ayarladık . Kullandığımız sınıfın adıSLF4JExample getLogger () yöntemine aktardığımız sınıf adı Sample ikisi de eşit olmadığı için aşağıdaki uyarıyı alacağız.
SLF4J: Detected logger name mismatch. Given name: "Sample"; computed name:
"SLF4JExample".
SLF4J: See http://www.slf4j.org/codes.html#loggerNameMismatch for an
explanation
Dec 10, 2018 12:43:00 PM SLF4JExample main
INFO: Hi Welcome to Tutorilspoint
Note - Bu, slf4j 1.7.9'dan sonra gerçekleşir
Classpath birden çok SLF4J bağlama içerir.
Sınıf yolunda yalnızca bir bağlamanız olmalıdır. Birden fazla bağlamanız varsa, bağlamaları ve bunların konumlarını listeleyen bir uyarı alırsınız.
Varsayalım, bağlamalarımız varsa slf4j-jdk14.jar ve slf4j-nop.jar sınıf yolunda aşağıdaki uyarıyı alacağız.
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in
[jar:file:/C:/Users/Tutorialspoint/Desktop/Latest%20Tutorials/SLF4J%20Tutorial/
slf4j-1.7.25/slf4j-nop-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in
[jar:file:/C:/Users/Tutorialspoint/Desktop/Latest%20Tutorials/SLF4J%20Tutorial/
slf4j-1.7.25/slf4j-jdk14-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an
explanation.
SLF4J: Actual binding is of type [org.slf4j.helpers.NOPLoggerFactory]
Sınıf yolunda hem log4j-over-slf4j.jar hem de slf4j-log4j12.jar bağlandı
Log4j logger çağrılarını slf4j'ye yeniden yönlendirmek için şunu kullanmanız gerekir: log4j-over-slf4j.jar bağlama ve slf4j çağrılarını log4j'ye yönlendirmek istiyorsanız, kullanmanız gerekir slf4j-log4j12.jar bağlayıcı.
Bu nedenle, sınıf yolunda ikisine birden sahip olamazsınız. Bunu yaparsanız, aşağıdaki istisnayı alırsınız.
SLF4J: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the
class path, preempting StackOverflowError.
SLF4J: See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more
details.
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:72)
at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:45)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
at SLF4JExample.main(SLF4JExample.java:8)
Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar
AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError.
See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details.