2017-06-05 75 views
0

我一直在靠近墙壁敲打我的头几乎2天,尝试了我在这里找到的几个问题的答案中的所有建议,没有喜悦。 Spring看起来很好,但是没有任何东西从我的应用程序类中记录下来。我正在使用Spring boot 1.5.3并构建一个使用log4j并在tomcat容器中运行的应用程序(所以它不需要Spring的嵌入式tomcat容器)。以下是在我原来的pom.xml的依赖关系:为什么我的类没有日志记录,但Spring正在记录(使用Maven和log4j进行Spring引导)?

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.5.3.RELEASE</version> 
</parent> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>ch.qos.logback</groupId> 
       <artifactId>logback-classic</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-tomcat</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.jboss.logging</groupId> 
       <artifactId>jboss-logging</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.hibernate</groupId> 
       <artifactId>hibernate-validator</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-logging</artifactId> 
      </exclusion> 
      <exclusion> 
       <artifactId>log4j-over-slf4j</artifactId> 
       <groupId>org.slf4j</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>2.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-jcl</artifactId> 
     <version>2.7</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>2.7</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging</artifactId> 
     <version>1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-web</artifactId> 
     <version>2.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-slf4j-impl</artifactId> 
     <version>2.7</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-log4j2</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

我试图通过@ M.Deinum建议的解决方案,在结果没有改变:春季登录成功,我的课没有。在这种情况下的pom.xml是这样的:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.5.3.RELEASE</version> 
</parent> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-log4j2</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

我在我的应用程序的类路径的根目录下面的配置文件:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="DEBUG"> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </Console> 
    </Appenders> 
    <Loggers> 
     <Logger name="org.springframework.beans.factory" level="DEBUG"/> 
     <Root level="DEBUG"> 
      <AppenderRef ref="Console"/> 
     </Root> 
    </Loggers> 
</Configuration> 

的在我的pom.xml依赖目前仅我尝试过使用Spring Framework参考4.3.8.RELEASE中的代码和多个在stackoverflow上回答的问题。

+0

显示你的职业等级的日志例子有记录器初始化 – Zico

+0

一起删除所有不包括(只排除'弹簧引导logging'),并添加了'弹簧引导起动log4j2',而不是依赖个人(当时 –

+0

@Zico我不确定这会回答你的问题,但是我的课程正在导入'org.apache.logging.log4j.LogManager'和'org.apache.logging.log4j.Logger'。类(这些都是单的Spring bean)创建'私有静态最后记录器记录= LogManager.getLogger(ThisClass.class);',并试图通过调用'logger.debug(“从未被写入日志文件中的一些文本”登录)'。 – Thom

回答

1

清理你的依赖关系,你排除了太多,包括太多。对于所有支持的日志包,Spring Boot都有单独的启动器,只需使用它们即可。

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <exclusions>    
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-log4j2</artifactId> 
    </dependency> 

</dependencies> 

这也在reference guide中解释。

现在,当你想使用日志确保要经过SLF4J API,而不是直接Log4j2(因为这可能会引发非常早期的初始化,并与春季启动安装干扰)。

要创建可展开的战争,您需要修改一些范围为provided的依赖关系而不排除它们。这也在reference guide中描述。

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
    <scope>provided</scope> 
</dependency> 
+0

我尝试了你所描述的内容,请检查我的原始文章的添加内容,它显示了我尝试了修改过的pom.xml,结果与之前相同。 – Thom

+0

正如我在答复中提到,使用SLF4J API,用于记录,而不是直接调用log4j2记录器。 –