Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导:使用logback而不是log4j_Java_Spring_Logging_Logback - Fatal编程技术网

Java Spring引导:使用logback而不是log4j

Java Spring引导:使用logback而不是log4j,java,spring,logging,logback,Java,Spring,Logging,Logback,出于性能和灵活性的考虑,我想使用Spring Boot项目。我将Logback依赖项添加到pom.xml: <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.3</version> </dependency> <dependen

出于性能和灵活性的考虑,我想使用Spring Boot项目。我将Logback依赖项添加到
pom.xml

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.3</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.3</version>
</dependency>
项目启动时,控制台中将显示以下警告:

log4j:WARN No appenders could be found for logger (org.springframework.boot.logging.ClasspathLoggingApplicationListener).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Spring似乎仍在尝试使用
log4j
,而不是logback。我尝试将
logging.config=classpath:logback.xml
添加到Spring
application.properties
,但没有解决问题

你能看出我做错了什么吗

更新 @alideghani和@chrylis都表示
log4j
正被
pom
中的另一个包引用。
mvn dependency:tree
的输出确认
hbase common
是源代码:

com.woolford:my-project:jar:1.0-SNAPSHOT
+- org.apache.hbase:hbase-common:jar:1.1.2:compile
|  [... etc ...]
|  +- commons-logging:commons-logging:jar:1.2:compile
|  [... etc ...]
|  +- org.apache.hadoop:hadoop-common:jar:2.5.1:compile
|  [... etc ...]
|  |  +- org.slf4j:slf4j-log4j12:jar:1.7.5:compile
|  |  \- com.jcraft:jsch:jar:0.1.42:compile
|  +- org.apache.hadoop:hadoop-mapreduce-client-core:jar:2.5.1:compile
|  [... etc ...]
|  +- log4j:log4j:jar:1.2.17:compile
|  [... etc ...]
\- org.apache.hbase:hbase-client:jar:1.1.2:compile
   [... etc ...]
我尝试将
log4j
(和
slf4j
)从
hbase common
中排除,如下所示:

public class MyClass {

    static final Logger LOG = LoggerFactory.getLogger(MyClass.class);
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-common</artifactId>
    <version>1.1.2</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
我尝试将这些依赖项添加到
pom.xml
,但没有帮助

@AliDehghani在下面的回答中指出,Spring Boot默认使用Logback,因此无需在
pom.xml
中添加
Logback核心
Logback经典
。我相信他是百分之百正确的。然而,当我在
pom.xml
中注释掉
logbackcore
logbackclassic
时,我看到了几个警告,例如:

log4j:ERROR Could not create an Appender. Reported error follows.
java.lang.ClassNotFoundException: ch.qos.logback.core.ConsoleAppender

默认情况下,Spring引导使用Logback进行日志记录。无需明确添加:

默认情况下,如果您使用“Starter POMs”,则将使用Logback进行 登录中。还包括适当的回写路由,以确保 使用javautil日志、Commons日志、Log4J的依赖库 否则SLF4J将全部正常工作


您还可以通过在
应用程序中使用
logging.level.*=level
来更改日志级别。properties

您已经知道这一点,但我想总结一下并概括一下


有以下三种日志框架:

  • log4j
    (古代)
  • slf4j
    (到处都使用api,有不同的后端可用)
  • logback
    (具有良好的功能和配置,是
    slf4j
    的继承者)
您必须手动抛出
log4j
,并将其替换为兼容桥
log4j-over-slf4j

有一个名为
logbackclassic
slf4j
后端


mvn:
是否还有其他依赖关系也在使用log4j?您可能需要排除它。将完整的
pom.xml
添加到问题。可能还有其他的依赖关系也会影响log4j。
org.apache.hbase:hbase common
->
log4j:log4j
显然,
hbase
依赖于
log4j
。从Hbase依赖项声明中排除log4j依赖项。让我们来看看。
log4j:ERROR Could not create an Appender. Reported error follows.
java.lang.ClassNotFoundException: ch.qos.logback.core.ConsoleAppender
<dependency>
    <!-- legacy log4j ==> slf4j -->
    <groupId>org.slf4j</groupId>
    <artifactId>log4j-over-slf4j</artifactId>
    <version>1.7.21</version>
</dependency>
<dependency>
    <!-- slf4j ==> logback -->
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>
<dependency>
    <groupId>...no maintainer...</groupId>
    <artifactId>...old stuff...</artifactId>
    <version>...ancient...</version>
    <exclusions>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>
libraryDependencies ++= Seq(
    Seq(...),
    Seq(
      "org.slf4j" % "log4j-over-slf4j" % "1.7.21",   // legacy log4j --> slf4j
      "ch.qos.logback" % "logback-classic" % "1.1.7" // slf4j --> logback
    )
  ).flatten.map(_.excludeAll(
    ExclusionRule(organization = "log4j", name = "log4j", artifact = "*"),
    ExclusionRule(organization = "org.slf4j", name = "slf4j-log4j12", artifact = "*")
  ))