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

2022-08-31 23:59:42

我有一个maven &spring应用程序,我想登录。我热衷于使用SLF4J。

我想把我所有的配置文件放到一个目录{classpath}/config中,包括log4j.xml然后使用spring bean初始化。

例如:

<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>

但是,我收到此警告并且没有日志记录。

log4j:WARN 找不到 logger 的附加器 (org.springframework.context.support.ClassPathXmlApplicationContext).log4j:警告 请正确初始化 log4j 系统。log4j:WARN 有关详细信息,请参阅 http://logging.apache.org/log4j/1.2/faq.html#noconfig

我已经用谷歌搜索了一下,找不到一个简单的例子来设置它。有什么想法吗?


答案 1

除了Jatin的回答:

Spring使用Jakarta Commons Logging作为日志记录API。为了登录到 slf4j,您需要确保 不在类路径上。 是共享资源日志记录的替代罐。commons-loggingjcl-over-slf4j

如果您使用的是maven,则可以检测共享资源日志记录的来源,并使用依赖关系排除将其从所有需要它的依赖项中排除。但是,您可能需要运行几次,因为它仅显示传递依赖项的第一次出现。mvn dependency:treemvn 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>

答案 2

您可以在 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>

推荐