0

从一个示例应用程序中,他们使用 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?)循环,我被告知这是因为弹簧伐木。

注释?

4

2 回答 2

0

我认为性能影响并不明显,但这取决于您记录了多少,以及为记录进行了多少计算。因此,包含大量计算的日志记录if(logger.isDebugEnabled()) {...}

于 2012-10-01T20:45:28.173 回答
0

Spring 使用 commons-logging,最终将使用您当前拥有的配置将其输出发送到 log4j。

通过添加 slf4j,您并没有更改 Spring 用于内部记录的内容 - 但您已经添加了另一个路径,用于从您自己的 slf4j 记录器获取日志消息到 log4j。

实际上,这种类型的事情不会真正产生任何影响(除了 commons-logging 之外还使用 slf4j,两者都发送到 log4j),因为 slf4j 或 commons-logging 在 log4j 面前都没有真正自己做很多工作 -他们基本上只是将他们的消息发送到 log4j 以发送到它的附加程序。

(但如果您担心性能,请一如既往地进行测试和测量!)

于 2012-10-01T21:01:02.673 回答