从示例应用程序中,他们使用的是slf4j,而依赖项的范围是运行时。
是否存在任何影响这种情况的影响,或者这是应用程序启动期间的一次性命中?
<!-- 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>
我相信spring和log4j存在一些内存泄漏,因为每当我在开发过程中使用jetty运行我的应用程序时,如果它在发生更改时每10秒重新加载一次,它最终会给我一个OOM错误(permgen?)经过几个周期后,我被告知这是因为泉水记录。
评论
答案 0 :(得分:0)
我不认为性能影响是显而易见的,但这取决于您记录的数量,以及记录的计算量。
因此,使用if(logger.isDebugEnabled()) {...}
答案 1 :(得分:0)
Spring使用commons-logging,最终将使用您当前的配置将其输出发送到log4j。
通过添加slf4j,您没有更改Spring用于内部日志的内容 - 但是您已经为自己的slf4j记录器添加了另一个日志消息路径,以便记录到log4j。
实际上,这种类型的东西实际上不会产生任何影响(使用slf4j除了commons-logging,它们都调度到log4j)因为slf4j或者commons-logging实际上在它自己的前面做了很多工作log4j - 他们基本上只是将他们的消息发送到log4j,以便发送给它的appenders。
(但如果您担心性能,请一如既往 - 测试并测量它!)