Meu aplicativo deve ser implementado no tcServer e no WebSphere 6.1. Este aplicativo usa o ehCache e, portanto, requer slf4j como uma dependência. Como resultado, adicionei o jar slf4j-api.jar (1.6) ao meu pacote de arquivos war.
O aplicativo funciona bem no tcServer, exceto pelo seguinte erro:
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.
No entanto, quando implanto no WebSphere, recebo um java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder
.
Também acompanhado por Failed to load class "org.slf4j.impl.StaticMDCBinder"
Eu verifiquei os caminhos de classe dos dois servidores de aplicativos e não há outro jar slf4j.
Alguém tem alguma idéia do que pode estar acontecendo aqui?
Respostas:
Eu tive o mesmo problema com o WebSphere 6.1. Como Ceki apontou, havia muitos jarros que o WebSphere estava usando e um deles estava apontando para uma versão mais antiga do slf4j.
O fallback No-Op acontece apenas com slf4j -1.6+, portanto, qualquer coisa mais antiga lançará uma exceção e interromperá sua implantação.
Existe uma documentação no site SLf4J que resolve isso. Eu segui isso e adicionei
slf4j-simple-1.6.1.jar
ao meu aplicativo junto com oslf4j-api-1.6.1.jar
que eu já tinha.Isso resolveu meu problema. Espero que ajude outras pessoas que têm esse problema.
fonte
Isto é para aqueles que vieram aqui da pesquisa do google.
Se você usa o maven, adicione o seguinte
Ou
fonte
slf4j-simple
não ter a mesma versão queslf4j-api
? Eles provavelmente funcionariam bem juntos, mas acho que é mais seguro e uma prática melhor, em geral, que eles usem a mesma versão. Além disso, se você precisar habilitar o log somente no console, por exemplo, ao executar testes de unidade, issoslf4j-simple
será suficiente (embora fosse para mim).Basta adicionar isso ao seu pom.xml :
fonte
<groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency>
e o problema foi resolvidoVocê precisa adicionar seguinte arquivo jar no classpath:
slf4j-simple-1.6.2.jar
. Se você não o possui, faça o download. Consulte http://www.slf4j.org/codes.html#multiple_bindingsfonte
jul-to-slf4j
no meupom.xml
e apenas adicioneislf4j-simple
antes e funciona bem.Algumas respostas aqui recomendam adicionar a dependência slf4j-simple ao seu arquivo maven pom. Você pode querer verificar a versão mais atual.
Em https://mvnrepository.com/artifact/org.slf4j/slf4j-simple, você encontrará a versão mais recente do SLF4J Simple Binding. Escolha a que melhor combina com você (ainda a versão 1.7.26 de 2019-02 é a versão estável a partir de 2019-07) e inclua-a no seu pom.xml.
Para sua conveniência, algumas dependências são mostradas aqui - mas elas podem não estar atualizadas quando você lê isso!
Versão alfa de 2019-10
Versão beta de fevereiro de 2019
Versão estável 2019-12
Eu removi a parte do teste de escopo graças ao comentário abaixo.
fonte
<scope>test</scope>
? Na minha experiência, eu pelo menos preciso deruntime
escopo para garantir queslf4j-simple
o caminho de classe esteja no caminho. Curioso como você conseguiu isso funcione apenas comtest
alcance ...Eu estava enfrentando o mesmo erro. Eu configurei slf4j-api, slf4j-log4j12 e log4j, no meu desenvolvimento local. Toda a configuração estava correta, mas a dependência do slf4j-log4j12, copiada do mvnrepository, tinha escopo de teste
<scope>test</scope>
. Quando eu removi isso tudo está bem.Às vezes, erros tolos quebram nossa cabeça;)
fonte
Em algum momento deveríamos ver a nota do aviso
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
.Você pode pesquisar o motivo pelo qual esse aviso ocorre.
Adicionando um do frasco de
*slf4j-nop.jar
,slf4j-simple.jar
,slf4j-log4j12.jar
,slf4j-jdk14.jar
oulogback-classic.jar*
para o caminho de classe deve resolver o problema.por exemplo, adicione o código acima ao seu
build.gradle
ou o código correspondente aopom.xml
projeto maven.fonte
colocar o arquivo
slf4j-log4j12-1.6.4.jar
no caminho de classe fará o truque.fonte
Se você estiver usando o maven no gerenciamento de dependências, poderá adicionar a seguinte dependência no pom.xml
Para usuários não-Maven Faça o download da biblioteca e coloque-a no caminho de classe do projeto.
Aqui você pode ver detalhes: http://www.mkyong.com/wicket/java-lang-classnotfoundexception-org-slf4j-impl-staticloggerbinder/
fonte
This is not an error. This message tells you that you do not have any logger implementation (such as e.g. Logback) added in classpath, and therefore NOP (No Operation) log
Procure pelo comentário sarxos como mencionado por @Paul e adicione logback-classic. Outra abordagem de mudança para<artifactId>slf4j-simple</artifactId>
partir<artifactId>slf4j-api</artifactId>
também faz o trabalho. É ilustrado aquiO SLF4j é uma abstração para várias estruturas de log . Portanto, além de ter o slf4j, você precisa incluir qualquer estrutura de registro, como log4j ou logback (etc), no seu caminho de classe.
Para ter uma idéia, consulte o Primeiro passo do bebê em http://logback.qos.ch/manual/introduction.html
fonte
Slf4j é uma fachada para as estruturas de log subjacentes, como log4j, logback, java.util.logging.
Para conectar-se às estruturas subjacentes, o slf4j usa uma ligação.
O erro acima é gerado se o jar de ligação estiver ausente. Você pode baixar este jar e adicioná-lo ao caminho de classe.
Para dependência maven,
Essa dependência, além do slf4j-log4j12-1.7.21.jar, puxará o slf4j-api-1.7.21.jar e o log4j-1.2.17.jar para o seu projeto
Referência: http://www.slf4j.org/manual.html
fonte
Eu estava enfrentando o problema semelhante com aplicativos Spring-boot-2 com a biblioteca Java 9.
A adição da seguinte dependência no meu pom.xml resolveu o problema para mim:
fonte
No caso do Websphere, você tem uma versão mais antiga do slf4j-api.jar, 1.4.x. ou 1.5.x em algum lugar. O comportamento observado no tcServer, com failover para o NOP, ocorre no slf4j versões 1.6.0 e posterior. Certifique-se de estar usando slf4j-api-1.6.x.jar em todas as plataformas e de que nenhuma versão mais antiga do slf4j-api seja colocada no caminho da classe.
fonte
Eu entrei nesse problema quando recebo o seguinte erro:
quando eu estava usando
slf4j-api-1.7.5.jar
no meulibs
.Apesar de ter tentado com todos os frascos de complemento sugeridos
slf4j-log4j12-1.7.5.jar
,slf4j-simple-1.7.5
a mensagem de erro ainda persistia. O problema finalmente foi resolvido quando adicioneislf4j-jdk14-1.7.5.jar
as bibliotecas java.Obtenha o pacote completo do slf4j em http://www.slf4j.org/download.html
fonte
Adicione as seguintes dependências ao pom para resolver esse problema.
fonte
Como uma alternativa para a inclusão de jar e soluções puras do maven, você pode incluí-lo no maven with gradle.
Exemplo para versão
1.7.25
Coloque isso dentro das dependências do seu
build.gradle
arquivo.fonte
Estou trabalhando em um projeto Struts2 + Spring. Então, precisa de uma dependência
slf4j-api-1.7.5.jar
.Se eu executar o projeto, estou recebendo um erro como
Falha ao carregar a classe "org.slf4j.impl.StaticLoggerBinder"
Resolvi meu problema adicionando o
slf4j-log4j12-1.7.5.jar
.Portanto, adicione este jar no seu projeto para resolver o problema.
fonte
Como o Manual do SLF4J declara
e
Portanto, você deve escolher qual ligação deseja usar.
Ligação NoOp (slf4j-nop)
Verifique a versão nova em https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav
Ligação simples (slf4j-simple)
Verifique a versão nova em https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav
Ligações para as estruturas de log (java.util.logging, logback, log4j)
Você precisará de uma dessas ligações se estiver gravando log em um arquivo.
Veja a descrição e as instruções em https://www.slf4j.org/manual.html#projectDep
Minha opinião
Eu recomendaria o Logback porque é um sucessor do log4j projeto .
Verifique a versão mais recente da encadernação em https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav
Você obtém a saída do console imediatamente, mas se precisar gravar logs no arquivo, basta colocar a
FileAppender
configuração nosrc/main/resources/logback.xml
ou nosrc/test/resources/logback-test.xml
seguinte:(Veja a descrição detalhada no manual: https://logback.qos.ch/manual/configuration.html )
fonte
Coloque a dependência mencionada acima no arquivo pom.xml
fonte
Eu adicionei essa dependência para resolver esse problema:
fonte
De acordo com a documentação oficial do SLF4J
Basta adicionar este jar junto com slf4j api.jar ao seu caminho de classe para fazer as coisas. Boa sorte
fonte
Eu resolvo adicionando esta biblioteca: slf4j-simple-1.7.25.jar Você pode fazer o download no site oficial https://www.slf4j.org/download.html
fonte
encontrou o mesmo problema no payara 5.191
jcl-over-slf4j junto com slf4j-log4j12 resolveram o problema
fonte
Eu sei que este post é um pouco antigo, mas no caso de mais alguém encontrar esse problema:
Adicione slf4j-jdk14-XXXjar ao seu CLASSPATH (onde XXX é o número da versão - por exemplo, slf4j-jdk14-1.7.5.jar).
HTH Peter
fonte
Eu uso Jena e adiciono a dependência de companheiros ao pom.xml
Eu tento adicionar slf4j-simple, mas simplesmente desaparece o erro "SLF4J: Falha ao carregar a classe" org.slf4j.impl.StaticLoggerBinder "", mas o logback-classic mostra mais informações.
O documento oficial
fonte
a solução é indicada no site oficial:
solução: eu adicionei ao meu projeto usando a pesquisa maven sobre intellij e escolhi o slf4j-jdk14.jar.
fonte
Provavelmente o seu problema foi causado por
<scope>test</scope>
(em alguns casos também<scope>provided</scope>
), como mencionado @thangaraj .A documentação diz:
Portanto, se você não precisa de dependências para fins de teste, pode usar em vez de (o que verá no mvnrepository ):
Sem escopos (por padrão, o escopo de compilação é quando nenhum outro escopo é fornecido):
É o mesmo que:
fonte
Aqui estão os meus 5 centavos ...
Eu tive os mesmos problemas ao executar testes. Então, eu o corrigi adicionando uma implementação apenas para o tempo de execução de teste. Estou usando o gradle para este projeto.
fonte
Para mim, o problema era: usando o Hibernate, vi que ele já usava slf4j e já estava no meu caminho de classe, então decidi usá-lo. A próxima etapa - adicionando o imlementor para slf4j, então adicionei ao maven:
Mas falhou com erro! SLF4J: falha ao carregar a classe "org.slf4j.impl.StaticLoggerBinder"
A solução foi: a dependência do slib4j do Hibernate era a versão 1.7.26 e eu adicionei a dependência menor da versão 1.7.25 . Então, quando eu consertei isso - tudo ficou bem
fonte
Não adicionei nenhuma dependência, apenas mudei a maneira como as consumia.
Código de visualização
(Remova o comentário deste código se você estiver usando a versão de pesquisa elástica <7.0)
Código atual
Estou usando o bulkrequest e, com isso, removo esse erro.
fonte