精华内容
下载资源
问答
  • 首先声明一下,我用的 Intellij IDEA 2018.3 版本的,springboot的版本是 2.0.5.RELEASE 版本。 当我喜滋滋的编写完测试代码,点击 Debug 的时候,睁大眼睛看控制台简直是看得一脸懵逼,控制台显示如下...SLF4J: D...

    首先声明一下,我用的 Intellij IDEA 2018.3 版本的,springboot的版本是 2.0.5.RELEASE  版本。

    当我喜滋滋的编写完测试代码,点击 Debug 的时候,睁大眼睛看控制台简直是看得一脸懵逼,控制台显示如下:

    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.
    
      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::        (v2.0.5.RELEASE)
    
    十二月 13, 2018 4:48:04 下午 org.apache.catalina.core.StandardService startInternal
    信息: Starting service [Tomcat]
    十二月 13, 2018 4:48:04 下午 org.apache.catalina.core.StandardEngine startInternal
    信息: Starting Servlet Engine: Apache Tomcat/8.5.34
    十二月 13, 2018 4:48:04 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
    信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [D:\Program Files\java\jdk1.8\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\NetSarang;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;D:\Program Files\java\jdk1.7\bin;D:\Program Files\mysql-5.7.17\bin;C:\WINDOWS\System32\OpenSSH\;D:\Program Files\Git\cmd;D:\Program Files\TortoiseSVN\bin;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;;.]
    十二月 13, 2018 4:48:05 下午 org.apache.catalina.core.ApplicationContext log
    信息: Initializing Spring embedded WebApplicationContext

    没错,就是这么点日志,但是注意 第一行  SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

    然后去 http://www.slf4j.org/codes.html#StaticLoggerBinder  地址看了下解决方法,这里我就不详细说了,反正大概意思就加上slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar,slf4j-jdk14.jar或 logback-classic.jar中的其中一个jar包就行(只能是一个,多了就会有冲突)。

    于是乎我加了 slf4j-simple  jar包代码如下:(这段代码是我直接从线上maven库中copy出来的,肯定不会有错)

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.25</version>
        <scope>test</scope>
      </dependency>

    引入依赖后,启动还是报错,一模一样,这TM就有点过分了,官网的解决方法一般是不会出错的,而且之前我也百度过,也是差不多一样的做法,那到底是什么问题呢?

    于是又是一顿找,看看前辈们有没有碰到过类似的错误,终于有所发现,最终修改代码如下:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.25</version>
        <scope>compile</scope>
      </dependency>
    

    没错,就是毁在这段代码上 <scope>test</scope> ,test表示只有在测试环境下,才可以使用,而我springboot是运行在main方法中,是不属于测试环境,所以这个包就相当于没有加入依赖,也就没有被加载到。改成compile则表示编译的时候就会加载此jar包,那么最后就运行成功了,成功的日志如下:
     

    "D:\Program Files\java\jdk1.8\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:51555,suspend=y,server=n -javaagent:C:\Users\Administrator\.IntelliJIdea2018.3\system\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "D:\Program Files\java\jdk1.8\jre\lib\charsets.jar;D:\Program Files\java\jdk1.8\jre\lib\deploy.jar;D:\Program Files\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\Program Files\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\Program Files\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\Program Files\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\Program Files\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\Program Files\java\jdk1.8\jre\lib\ext\localedata.jar;D:\Program Files\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\Program Files\java\jdk1.8\jre\lib\ext\sunec.jar;D:\Program Files\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\Program Files\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\Program Files\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\Program Files\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\Program Files\java\jdk1.8\jre\lib\javaws.jar;D:\Program Files\java\jdk1.8\jre\lib\jce.jar;D:\Program Files\java\jdk1.8\jre\lib\jfr.jar;D:\Program Files\java\jdk1.8\jre\lib\jfxswt.jar;D:\Program Files\java\jdk1.8\jre\lib\jsse.jar;D:\Program Files\java\jdk1.8\jre\lib\management-agent.jar;D:\Program Files\java\jdk1.8\jre\lib\plugin.jar;D:\Program Files\java\jdk1.8\jre\lib\resources.jar;D:\Program Files\java\jdk1.8\jre\lib\rt.jar;E:\IdeaProjects\miaosha\target\classes;E:\repository\org\springframework\boot\spring-boot-starter-web\2.0.5.RELEASE\spring-boot-starter-web-2.0.5.RELEASE.jar;E:\repository\org\springframework\boot\spring-boot-starter\2.0.5.RELEASE\spring-boot-starter-2.0.5.RELEASE.jar;E:\repository\org\springframework\boot\spring-boot\2.0.5.RELEASE\spring-boot-2.0.5.RELEASE.jar;E:\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.5.RELEASE\spring-boot-autoconfigure-2.0.5.RELEASE.jar;E:\repository\org\springframework\boot\spring-boot-starter-logging\2.0.5.RELEASE\spring-boot-starter-logging-2.0.5.RELEASE.jar;E:\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;E:\repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;E:\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;E:\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;E:\repository\org\springframework\spring-core\5.0.9.RELEASE\spring-core-5.0.9.RELEASE.jar;E:\repository\org\springframework\spring-jcl\5.0.9.RELEASE\spring-jcl-5.0.9.RELEASE.jar;E:\repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;E:\repository\org\springframework\boot\spring-boot-starter-json\2.0.5.RELEASE\spring-boot-starter-json-2.0.5.RELEASE.jar;E:\repository\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar;E:\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;E:\repository\com\fasterxml\jackson\core\jackson-core\2.9.6\jackson-core-2.9.6.jar;E:\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.6\jackson-datatype-jdk8-2.9.6.jar;E:\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.6\jackson-datatype-jsr310-2.9.6.jar;E:\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.6\jackson-module-parameter-names-2.9.6.jar;E:\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.5.RELEASE\spring-boot-starter-tomcat-2.0.5.RELEASE.jar;E:\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.34\tomcat-embed-core-8.5.34.jar;E:\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.34\tomcat-embed-el-8.5.34.jar;E:\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.34\tomcat-embed-websocket-8.5.34.jar;E:\repository\org\hibernate\validator\hibernate-validator\6.0.12.Final\hibernate-validator-6.0.12.Final.jar;E:\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;E:\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;E:\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;E:\repository\org\springframework\spring-web\5.0.9.RELEASE\spring-web-5.0.9.RELEASE.jar;E:\repository\org\springframework\spring-beans\5.0.9.RELEASE\spring-beans-5.0.9.RELEASE.jar;E:\repository\org\springframework\spring-webmvc\5.0.9.RELEASE\spring-webmvc-5.0.9.RELEASE.jar;E:\repository\org\springframework\spring-aop\5.0.9.RELEASE\spring-aop-5.0.9.RELEASE.jar;E:\repository\org\springframework\spring-context\5.0.9.RELEASE\spring-context-5.0.9.RELEASE.jar;E:\repository\org\springframework\spring-expression\5.0.9.RELEASE\spring-expression-5.0.9.RELEASE.jar;E:\repository\org\slf4j\slf4j-simple\1.7.25\slf4j-simple-1.7.25.jar;E:\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;D:\Program Files\IntelliJ IDEA 2018.3\lib\idea_rt.jar" cn.com.miaosha.App
    Connected to the target VM, address: '127.0.0.1:51555', transport: 'socket'
    Hello World!
    [background-preinit] INFO org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator 6.0.12.Final
     
      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::        (v2.0.5.RELEASE)
     
    [main] INFO cn.com.miaosha.App - Starting App on SC-201806131812 with PID 13188 (E:\IdeaProjects\miaosha\target\classes started by Administrator in E:\IdeaProjects\miaosha)
    [main] INFO cn.com.miaosha.App - No active profile set, falling back to default profiles: default
    [main] INFO org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext - Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@36b4fe2a: startup date [Thu Dec 13 17:07:55 CST 2018]; root of context hierarchy
    [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 8080 (http)
    十二月 13, 2018 5:08:02 下午 org.apache.catalina.core.StandardService startInternal
    信息: Starting service [Tomcat]
    十二月 13, 2018 5:08:02 下午 org.apache.catalina.core.StandardEngine startInternal
    信息: Starting Servlet Engine: Apache Tomcat/8.5.34
    十二月 13, 2018 5:08:02 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
    信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [D:\Program Files\java\jdk1.8\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\NetSarang;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;D:\Program Files\java\jdk1.7\bin;D:\Program Files\mysql-5.7.17\bin;C:\WINDOWS\System32\OpenSSH\;D:\Program Files\Git\cmd;D:\Program Files\TortoiseSVN\bin;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;;.]
    十二月 13, 2018 5:08:02 下午 org.apache.catalina.core.ApplicationContext log
    信息: Initializing Spring embedded WebApplicationContext
    [localhost-startStop-1] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 7244 ms
    [localhost-startStop-1] INFO org.springframework.boot.web.servlet.ServletRegistrationBean - Servlet dispatcherServlet mapped to [/]
    [localhost-startStop-1] INFO org.springframework.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'characterEncodingFilter' to: [/*]
    [localhost-startStop-1] INFO org.springframework.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
    [localhost-startStop-1] INFO org.springframework.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'httpPutFormContentFilter' to: [/*]
    [localhost-startStop-1] INFO org.springframework.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'requestContextFilter' to: [/*]
    [main] INFO org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
    [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@36b4fe2a: startup date [Thu Dec 13 17:07:55 CST 2018]; root of context hierarchy
    [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/]}" onto public java.lang.String cn.com.miaosha.App.home(javax.servlet.http.HttpServletRequest)
    [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
    [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
    [main] INFO org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
    [main] INFO org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
    [main] INFO org.springframework.jmx.export.annotation.AnnotationMBeanExporter - Registering beans for JMX exposure on startup
    [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''
    [main] INFO cn.com.miaosha.App - Started App in 11.308 seconds (JVM running for 14.362)
    

    这日志看上去就正常了。

    当然这只是我的解决方法,也许是我的粗心大意吧!如果你也遇到了这种情况可以不妨一试吧。

    展开全文
  • slf4j

    千次阅读 2019-07-24 10:32:27
    简单的Java日志记录(SLF4J) 官方文档:https://www.slf4j.org/docs.html 一.什么是SLF4JSLF4J是用于日志记录系统的简单外观,允许最终用户在部署时插入所需的日志记录系统。Simple Logging Facade for Java...

    简单的Java日志记录(SLF4J)

    官方文档:https://www.slf4j.org/docs.html

    一.什么是SLF4J?

    SLF4J是用于日志记录系统的简单外观,允许最终用户在部署时插入所需的日志记录系统。Simple Logging Facade for Java(SLF4J)用作各种日志框架(例如java.util.logging,logback,log4j)的简单外观或抽象,允许最终用户在部署 时插入所需的日志记录框架。

    最简单的slf4j示例:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    公共类HelloWorld {
      public static void main(String [] args){
        Logger logger = LoggerFactory.getLogger(HelloWorld.class);
        logger.info(“Hello World”);
      }

    要运行此示例,首先需要下载slf4j发行版,然后将其解压缩。完成后,将文件 slf4j-api-1.7.26.jar添加到类路径中。

    https://www.slf4j.org/download.html

    二.什么时候应该使用SLF4J?

    SLF4J只是一个外观,这意味着它不提供完整的日志记录解决方案。使用SLF4J无法执行配置appender或设置日志记录级别等操作。因此,在某个时间点,任何非平凡的应用程序都需要直接调用底层日志记录系统。换句话说,独立应用程序无法完全独立于API底层日志记录系统。然而,SLF4J减少了这种依赖对近乎无痛水平的影响。
    假设您的CRM应用程序使用log4j进行日志记录。但是,您的一个重要客户端要求通过JDK 1.4日志记录执行日志记录。如果您的应用程序充斥着成千上万的直接log4j调用,那么迁移到JDK 1.4将是一个相对冗长且容易出错的过程。更糟糕的是,您可能需要维护两个版本的CRM软件。如果您一直在调用SLF4J API而不是log4j,则可以在几分钟内通过将一个jar文件替换为另一个jar文件来完成迁移。
     

    官方提供的典型使用模式:

     

    Fluent Logging API

    自2.0.0以来, SLF4J API 2.0.0版需要Java 8,并引入了向后兼容的流畅日志API。我们的想法是与LoggingEventBuilder一起构建一个日志记录事件, 并在事件完全构建后记录。所有新的org.slf4j.Logger界面,返回的一个实例LoggingEventBuilder。对于禁用的日志级别,返回的 LoggingEventBuilder实例不执行任何操作,从而保留常规日志记录接口的纳秒级性能。使用下列方法:

    atTrace(),atDebug(),atInfo(),atWarn(),atError()

    以下是一些使用示例:

            int newT = 15;
            int oldT = 16;
    
            // using classical API
            logger.debug("Temperature set to {}. Old temperature was {}.", newT, oldT);
    
            // using fluent API, add arguments one by one and then log message
            logger.atDebug().addArgument(newT).addArgument(oldT).log("Temperature set to {}. Old temperature was {}.");
    
            // using fluent API, log message with arguments
            logger.atDebug().log("Temperature set to {}. Old temperature was {}.", newT, oldT);
    
            // using fluent API, add one argument and then log message providing one more argument
            logger.atDebug().addArgument(newT).log("Temperature set to {}. Old temperature was {}.", oldT);
    
            // using fluent API, add one argument with a Supplier and then log message with one more argument.
            // Assume the method t16() returns 16.
            logger.atDebug().addArgument(() -> t16()).log(msg, "Temperature set to {}. Old temperature was {}.", oldT);
    

    以下日志语句在其输出中是等效的(就默认实现而言):

    int newT = 15;
            int oldT = 16;
    
            //使用经典API
            logger.debug(“oldT = {} newT = {}温度已更改。”,newT,oldT);
    
            //使用流畅的API
            logger.atDebug()。addKeyValue(“oldT”,oldT) .addKeyValue(“newT”,newT).log(“Temperature changed。”);

    SLF4J不依赖于任何特殊的类装载机械。实际上,每个SLF4J绑定在编译时都是硬连线的 以使用一个且只有一个特定的日志记录框架。例如,slf4j-log4j12-1.7.26.jar绑定在编译时绑定以使用log4j。在您的代码中,除了slf4j-api-1.7.26.jar之外,您只需将 您选择的一个且只有一个绑定放到相应的类路径位置。不要在类路径上放置多个绑定。以下是一般概念的图解说明。

    SLF4J接口及其各种适配器非常简单。大多数熟悉Java语言的开发人员应该能够在不到一小时的时间内阅读并完全理解代码。不需要类加载器的知识,因为SLF4J不能使用,也不能直接访问任何类加载器。因此,SLF4J不会遇到使用Jakarta Commons Logging(JCL)观察到的类加载器问题或内存泄漏。

    鉴于SLF4J接口及其部署模型的简单性,新的日志框架的开发人员应该发现编写SLF4J绑定非常容易。

    三.SLF4J API


    在SLF4J 1.0beta4中,修改了Logger接口中的debug(),info(),warn(),error()等打印方法,以便只接受String类型而不是Object类型的消息。

    因此,DEBUG级别的打印方法集合变为:

    debug (String msg );
    debug (String format ,Object arg );
    debug (String format ,Object arg1 ,Object arg2 );             
    debug (String msg ,Throwable t );

    打印错误输出日志:

    logger.error("some accompanying message", e);
    
    
    logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
    
    Object entry = new SomeObject();
    logger.debug("The entry is {}.", entry);
    
    logger.debug("The new entry is "+entry+".");
    logger.debug("The new entry is {}.", entry);
    
    logger.debug("The new entry is {}. It replaces {}.", entry, oldEntry);
    
    logger.debug("Value {} was inserted between {} and {}.", newVal, below, above);

    如何记录单个(可能是复杂的)对象的字符串内容?

    在要记录的消息是对象的字符串形式的相对罕见的情况下,可以使用适当级别的参数化打印方法。假设complexObject是一个具有某种复杂性的对象,对于级别DEBUG的日志语句,您可以编写:

    logger.debug (“{}”,complexObject );logger.debug (“{}”,complexObject );

    complexObject.toString()只有在确定启用了日志语句后,日志记录系统才会调用 方法。否则,complexObject.toString()将有利地避免转换成本 。

     

    四.实现SLF4J API

    如何使我的日志框架SLF4J兼容?
    增加对SLF4J的支持非常简单。从本质上讲,你应对现有的绑定并稍微调整它(如下所述)就可以了。
    假设您的日志记录系统具有记录器的概念,例如MyLogger,您需要提供适用MyLogger于 org.slf4j.Logger接口的适配器。有关适配器的示例,请参阅slf4j-jcl,slf4j-jdk14和slf4j-log4j12模块。
    一旦编写了适当的适配器,比如说 MyLoggerAdapter,您需要提供一个实现该org.slf4j.ILoggerFactory 接口的工厂类。这个工厂应该返回实例 MyLoggerAdapter。让我们MyLoggerFactory 的工厂类名称。
    一旦你有了适配器,即 MyLoggerAdapter和工厂,即 MyLoggerFactory最后剩下的一步是修改StaticLoggerBinder类,使它返回一个新的实例MyLoggerFactory。您还需要修改loggerFactoryClassStr变量。
    对于Marker或MDC支持,您可以使用现有的NOP实现之一。
    总之,要为日志记录系统创建SLF4J绑定,请按照下列步骤操作:

    1. 从现有模块的副本开始,
    2. 在日志系统和org.slf4j.Logger接口 之间创建适配器
    3. 为上一步创建的适配器创建工厂,
    4. 修改StaticLoggerBinder类以使用您在上一步中创建的工厂


    总之,将logger成员声明为静态变量需要较少的CPU时间并且内存占用量略小。另一方面,将记录器成员声明为实例变量需要更多的CPU时间并且具有稍高的内存开销。但是,实例变量可以为每个应用程序创建不同的记录器环境,即使对于在共享库中声明的记录器也是如此。也许比之前提到的考虑因素更重要的是,实例变量对IOC友好,而静态变量则不然。

     

    声明用法:

    package some.package;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
          
    public class MyClass {
      final (static) Logger logger = LoggerFactory.getLogger(MyClass.class);
      ... etc
    }

    参考文档:https://www.slf4j.org/

    展开全文
  • SLF4J

    2013-05-12 14:19:43
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: slf4j-api 1.6.x (or later) is incompatible with this binding. SLF4J: Your binding is version 1.5.5 or earlier. SLF4J: Upgrade

    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

    SLF4J: slf4j-api 1.6.x (or later) is incompatible with this binding.

    SLF4J: Your binding is version 1.5.5 or earlier.

    SLF4J: Upgrade your binding to version 1.6.x. or 2.0.x

     

    解压后把  slf4j-nop-1.5.2.jar加入的到项目类库中.
    展开全文
  • 原因 引入了一个第三方 jar 包,里面...SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/tudan/Documents/WorkLearn3/wechat-demo/lib/itchat4j-1.1.0-jar-wi...

    原因

    引入了一个第三方 jar 包,里面打包了别的日志插件,导致报错

    堆栈信息

    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/C:/Users/tudan/Documents/WorkLearn3/wechat-demo/lib/itchat4j-1.1.0-jar-with-dependencies.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/C:/Users/tudan/Documents/Work/maven_repo/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.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.impl.Log4jLoggerFactory]
    Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.Log4jLoggerFactory loaded from file:/C:/Users/tudan/Documents/WorkLearn3/wechat-demo/lib/itchat4j-1.1.0-jar-with-dependencies.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.slf4j.impl.Log4jLoggerFactory
    	at org.springframework.util.Assert.instanceCheckFailed(Assert.java:696)
    	at org.springframework.util.Assert.isInstanceOf(Assert.java:596)
    	at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:281)
    	at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:104)
    	at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:239)
    	at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:220)
    	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
    	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
    	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
    	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
    	at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:70)
    	at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:47)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:305)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
    	at indi.tudan.wechat.WechatDemoApplication.main(WechatDemoApplication.java:13)
    Disconnected from the target VM, address: '127.0.0.1:0', transport: 'socket'
    
    Process finished with exit code 1
    
    

    解决方法

    先查找出哪个 jar 包引入了日志,然后根据需要保留和去除

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!--<exclusions>
            <exclusion>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
            </exclusion>
        </exclusions>-->
    </dependency>
    

    参考资料

    https://segmentfault.com/a/1190000017285395

    展开全文
  • 【问题记录】java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding ...
  • @Slf4j 注解 lombok.extern.slf4j.Slf4j

    万次阅读 2018-11-20 17:11:53
    @Retention(RetentionPolicy....public @interface Slf4j { String topic() default ""; } 源码中可以看到@Slf4j这个注解是SOURCE级别的,在class文件中被解析成 private static final Logger log ...
  • 让代码飞 ...SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in 异常: SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:fi...
  • SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/E:/workspace/XXX/WebRoot/WEB-INF/lib/log4j-slf4j-impl-2.9.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]...
  • Slf4j分析】slf4j-api和slf4j-simple

    千次阅读 2016-09-09 19:17:16
    本来想分析logback源码,可是它太多了~读起来有点吃力,先分析下slf4j和它的简单实现slf4j-simple一 基础使用maven: <groupId>org.slf4j <artifactId>slf4j-api <version>1.7.21 </depe
  • lombok一直用起来很爽,特别是使用lombok+mybatis-plus的脚手架后,开发效率非常高,今天在开发过程中突然发现使用了@Slf4j注解后在类中无法通过log调用日志打印方法。 现象如图 使用@Slf4j 调用log方法时提示 ...
  • springboot 关于 Class path contains multiple SLF4J bindings.警告的解决   有一次配置好springboot项目启动后,忽然发现有下边的警告: SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found...
  • SLF4J: No SLF4J providers were found.

    千次阅读 2018-12-08 18:51:20
    1.解决SLF4J报错 大家经常碰到,在自己的项目中使用了SLF4J,或者引入了某开源项目(例如Netty)时,运行时会报如下的错误: SLF4J: No SLF4J providers were found. SLF4J: Defaulting to no-operation (NOP) ...
  • slf4j:Simple Logging Facade for Java,为java提供的简单日志Facade。 Facade:门面,更底层一点说就是接口。他允许用户以自己的喜好,在工程中通过slf4j接入不同的日志系统。更直观一点,slf4j...
  • 【解决】SLF4J: Class path contains multiple SLF4J bindings.

    千次阅读 多人点赞 2021-02-19 17:46:56
    【解决】SLF4J: Class path contains multiple SLF4J bindings. 在启动springboot项目时,遇到了这个问题,上网查询多个方案,最终这个方法得到解决 问题描述: SLF4J: Class path contains multiple SLF4J bindings...
  • 1.解决SLF4J报错 我们在自己的项目中使用了SLF4J,或者引入了某开源项目时,他的项目中用了SLF4J,运行时会报如下的错误: SLF4J: No SLF4J providers were found. SLF4J: Defaulting to no-operation (NOP) ...
  • log4j-slf4j-impl是吧log4j的日志转到slf4j上,你应该用slf4j-log4j12,这两个jar包不弄同时用,还有slf4j-log4j12不能和slf4j-simple,slf4j-jdk14 原网址:https://www.oschina.net/question/864431_2235268 转载于:...
  • 对于j2ee 开发者来说,难免会引入各种框架,而当需要查看框架打印的日志的时候,你会发现每个框架引用的日志框架又不相同,什么slf4j,logback,log4j… 头都大了,处理的一不小心,轻则日志打印不出来,重则项目起不...
  • slf4j-api-1.5.8.jar,slf4j-log4j12-1.5.6.jar,slf4j-simple-1.5.8.jar 还在为找不到jar文件烦心吗,不用了到我空间来有你想要的,持续更新。。。
  • slf4j-api、slf4j-log4j12、log4j之间关系

    千次阅读 2019-08-06 20:43:34
    2.slf4j-api、slf4j-log4j12、log4j 3. log4j 3.1 log4j的使用 3.2 log4j配置使用 3.2.1 定义配置文件 3.2.2 在代码中使用log4j x. 参考资料 Top 1. slf4j-api slf4j:Simple Logging Facade for ...
  • springboot项目跑起来后,一直报SLF4J包冲突,看着很烦。 Connected to the target VM, address: '127.0.0.1:64448', transport: 'socket' SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found ...
  • SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6] SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details. 解决办法:使slf4j-api-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,886
精华内容 9,954
关键字:

slf4j