Java 我如何配置Spring和SLF4J,以便获得日志记录?
我有一个maven&spring应用程序,我想登录。我热衷于使用SLF4J 我想将所有配置文件放入一个目录{classpath}/config,包括log4j.xml,然后使用Springbean初始化 e、 gJava 我如何配置Spring和SLF4J,以便获得日志记录?,java,spring,logging,log4j,slf4j,Java,Spring,Logging,Log4j,Slf4j,我有一个maven&spring应用程序,我想登录。我热衷于使用SLF4J 我想将所有配置文件放入一个目录{classpath}/config,包括log4j.xml,然后使用Springbean初始化 e、 g classpath:config/log4j.xml 然而,我得到这个警告,没有日志记录 log4j:WARN找不到记录器(org.springframework.context.support.ClassPathXmlApplicationContext)的追加器。 log4j:
classpath:config/log4j.xml
然而,我得到这个警告,没有日志记录
log4j:WARN找不到记录器(org.springframework.context.support.ClassPathXmlApplicationContext)的追加器。
log4j:警告请正确初始化log4j系统。
log4j:有关更多信息,请参阅警告
我在谷歌上搜索过,找不到一个简单的例子。有什么想法吗?你可以在网站上找到一个例子。您需要在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>
org.slf4j
slf4j api
${org.slf4j.version}
org.slf4j
jcl-over-slf4j
${org.slf4j.version}
运行时
org.slf4j
slf4j-log4j12
${org.slf4j.version}
运行时
log4j
log4j
1.2.16
运行时
将log4j文件保存在默认包中除了Jatin的答案之外:
Spring使用Jakarta Commons日志作为日志API。为了登录到slf4j,您需要确保commons logging
不在类路径上jcl-over-slf4j
是一个用于commons日志的替代jar
如果您使用的是maven,那么可以使用mvn dependency:tree
检测commons日志记录的来源,并使用dependency Exclutions将其从所有需要它的依赖项中排除。不过,您可能需要多次运行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>
org.springframework
spring上下文
${org.springframework.version}
公用记录
公用记录
使用blow配置在类路径上实现JCL API
:
<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>
org.springframework
为了完整起见,一个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>
回写
回归经典
1.0.0
org.slf4j
jcl-over-slf4j
1.6.6
运行时
但是,不要忘记禁用公共日志记录
依赖关系,该依赖关系源自Spring依赖关系,如已接受的(Stijn)回答中所述。我喜欢回写方式,而对于slf4j,我们做了类似的配置:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
org.slf4j
slf4j-log4j12
org.slf4j
jcl-over-slf4j
slf4j-log4j12将自动引入slf4j api和log4j,因此不需要放置太多依赖项,只需添加lazy init=“false”
即可在根上下文中急切地加载用于log4j配置的bean。这将解决警告消息log4j:WARN找不到记录器的附加器
例如:
<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" lazy-init="false">
更好的方法是将配置放在web.xml中,或者作为JVM参数(-Dlog4j.configuration=…/conf/log4j.xml
,或者使用'file:'前缀作为-Dlog4j.configuration=file:conf/log4j.properties
,在某些情况下)我猜。如果您尝试一个完整的路径C:/config/log4j.xmlNope,它是否会有任何不同。硬编码没有帮助=(该示例将log4j config文件直接放在类路径中,而不是我想要的配置目录下。事实上,这确实有点帮助。我现在已经登录到我的应用程序中,只是spring在抱怨。如果某个特定类抱怨,您需要将所需的包添加到向记录器注册的包列表中。你也可以把它放在一个配置文件夹中,并将该文件夹添加到类路径中。我认为警告是只启动的。一旦log4j配置器bean运行,我就会得到我需要的所有日志记录。能够消除警告会很好,但我想我可以保留它。我喜欢这里建议的第三种方法——使用空工件。T在当前版本的Spring参考手册中建议使用该选项。
<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" lazy-init="false">