如何配置Spring和SLF4J以便我可以获取日志记录?

Pet*_*son 44 java logging spring log4j slf4j

我有一个我想要登录的maven&spring应用程序.我很想使用SLF4J.

我想将所有配置文件放入包含log4j.xml的目录{classpath}/config中,然后使用spring bean将init放入.

例如

<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetClass" value="org.springframework.util.Log4jConfigurer"/>
    <property name="targetMethod" value="initLogging"/>
    <property name="arguments">
        <list>
            <value>classpath:config/log4j.xml</value>
        </list>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

但是我收到此警告并且没有记录.

log4j的:警告没有附加目的地可以发现记录器(org.springframework.context.support.ClassPathXmlApplicationContext).log4j:WARN请正确初始化log4j系统.log4j的:WARN见http://logging.apache.org/log4j/1.2/faq.html#noconfig获取更多信息.

我已经google了,找不到一个简单的例子来设置它.有任何想法吗?

Sti*_*ael 46

除了贾丁的回答:

Spring使用Jakarta Commons Logging作为日志记录API.要记录到slf4j,您需要确保commons-logging不在类路径上.jcl-over-slf4j公共采伐的替代罐子.

如果您正在使用maven,则可以检测commons-logging来自何处使用,mvn dependency:tree并将其从使用依赖项排除的所有依赖项中排除.您可能需要mvn dependency:tree多次运行,因为它只显示传递依赖项的第一次出现.

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>${org.springframework.version}</version>
  <exclusions>
    <exclusion>
      <artifactId>commons-logging</artifactId>
      <groupId>commons-logging</groupId>
    </exclusion>
  </exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)


小智 27

您可以在https://github.com/mbogoevici/spring-samples/tree/master/mvc-basic/trunk找到一个示例.您需要在POM文件中包含一些依赖项以启用日志记录.

<!-- Logging -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${org.slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${org.slf4j.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${org.slf4j.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
        <scope>runtime</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)


Bor*_*hov 6

仅仅为了完整性,一个logback-classic变体:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.0.0</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.6.6</version>
    <scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但是不要忘记禁用commons-logging从Spring 依赖中萌芽的依赖,就像在接受(Stijn)的答案中一样.


Cha*_*har 5

使用打击配置实现JCL APIclasspath:

<dependencies>
       <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>3.0.0.RELEASE</version>
          <scope>runtime</scope>
          <exclusions>
             <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
             </exclusion>
          </exclusions>
       </dependency>
       <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>jcl-over-slf4j</artifactId>
          <version>1.5.8</version>
          <scope>runtime</scope>
       </dependency>
       <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.5.8</version>
          <scope>runtime</scope>
       </dependency>
       <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>1.5.8</version>
          <scope>runtime</scope>
       </dependency>
       <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.14</version>
          <scope>runtime</scope>
       </dependency>
    </dependencies> 
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请点击此处