Java日志系统FAQ

slf4j只是一个门面(facet),它不包含具体的实现,而是将一些log4j,java.logging等实现包装成统一的接口。

    commons-logging和slf4j都是日志的接口,供用户使用,而没有提供实现!java

  log4j,logback等等才是日志的真正实现。框架

  当咱们调用接口时,接口的工厂会自动寻找恰当的实现,返回一个实现的实例给我服务。这些过程都是透明化的,用户不须要进行任何操做!ui


能够与slf4j组合使用的日志框架实现有:spa

  1. Slf4j-simple,slf4j自带的一个简单实现,可用于小项目中,但没法配置日志级别等。
    debug

  2. slf4j-jdk,使用jkd自带的日志系统,在项目的build_path中加入slf4j-1.6.6.jar与slf4j-jdk14-1.6.6.jar。日志

  3. slf4j-log4j log4j是目前用得最多的日志系统,它更适用于大型项目。 在项目的build_path中加入slf4j-1.6.6.jar与slf4j-log4j-1.6.6.jar,以及log4j的具体实现,如log4j-1.2.16.jar。code


FAQ:接口

  1. 注意build_path中不能有多个日志实现,不然会致使slf4j不知道该使用哪一个实现,从而出现如下错误:ip

  2. SLF4J: Class path contains multiple SLF4J bindings.
  3. 因为不少项目都会使用log4j做为日志框架,而在一个项目的引用包中的log4j配置文件有可能将本身定义的log4j.properties文件覆盖。若是发现本身的log4j配置文件不生效,则使用:java -Dlog4j.debug 主类来检查目前加载了哪一个配置文件,而后将其删除便可。class

  4. 另外,即便使用了PropertyConfigurator.configure(“log4j2.properties”); 指定配置文件,也有可能被第三方jar包使用一样语句覆盖了。

  5. CLASSPATH中不能有多个log4j的版本本,不然有有奇形怪状的NoSuchMethod, NoSuchFiled, NoClassDefineFound等异常。

  6. 配置文件啊,若是你引用的第三方包有log4j.properties,而又没有提供给你编辑,那恭喜你,慢慢调吧。把log4j的配置写入代码吧,不要用配置文件了

  7. 若是你打算只使用log4j,而不使用slf4j做包装,切记classpath中只能有log4j,不能有log4j-over-slf4j-1.7.12.jar这种包,否则会出现各类各样的错误,如: NoSuchMethod, NoSuchFiled, NoClassDefineFound, IncompatibleClassChangeError: Implementing class

相关文章
相关标签/搜索