小编典典

如何配置 Spring 和 SLF4J 以便获得日志记录?

all

我有一个想要登录的 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 找不到记录器的附加程序(org.springframework.context.support.ClassPathXmlApplicationContext)。log4j:WARN 请正确初始化 log4j 系统。log4j:WARN 有关详细信息,请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig。

我用谷歌搜索,找不到一个简单的例子来设置它。有任何想法吗?


阅读 122

收藏
2022-05-23

共1个答案

小编典典

Spring 使用 Jakarta Commons Logging 作为日志 API。为了登录到 slf4j,您需要确保commons-logging不在类路径上。jcl-over-slf4j是公共日志记录的替换 jar。

如果您使用的是 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>
2022-05-23