使用带有spring mvc的slf4j有什么性能影响吗?

时间:2012-10-01 20:42:03

标签: java spring-mvc log4j jetty slf4j

从示例应用程序中,他们使用的是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?)经过几个周期后,我被告知这是因为泉水记录。

评论

2 个答案:

答案 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。

(但如果您担心性能,请一如既往 - 测试并测量它!)