Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将slf4j与spring mvc结合使用是否会对性能产生影响?_Java_Spring Mvc_Log4j_Jetty_Slf4j - Fatal编程技术网

Java 将slf4j与spring mvc结合使用是否会对性能产生影响?

Java 将slf4j与spring mvc结合使用是否会对性能产生影响?,java,spring-mvc,log4j,jetty,slf4j,Java,Spring Mvc,Log4j,Jetty,Slf4j,从一个示例应用程序来看,他们使用的是slf4j,依赖项的范围是运行时 这样做是否会对性能产生影响,或者是在应用程序启动期间一次性受到影响 <!-- Logging --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId>

从一个示例应用程序来看,他们使用的是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>

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
运行时
我相信spring和log4j存在一些内存泄漏,因为每当我在开发过程中使用jetty运行我的应用程序时,如果它在发生更改时每10秒重新加载一次,在几个周期后,它最终会给我一个OOM错误(permgen?),我被告知这是因为springs日志记录


评论?

我认为性能影响不明显,但这取决于您记录了多少日志,以及为日志记录做了多少计算。
因此,如果(logger.isDebugEnabled()){…}

Spring使用commons日志记录,它将使用当前的配置将其输出发送到log4j,那么就可以使用
进行大量计算

通过添加slf4j,您并没有改变Spring用于内部日志记录的内容,但您已经为日志消息添加了另一条路径,该路径来自您自己的slf4j记录器,可用于日志4J

事实上,这种类型的事情不会产生任何影响(除了commons日志之外,还使用slf4j,两者都发送到log4j),因为slf4j或commons日志本身在log4j前面都没有做很多工作——它们基本上只是将消息发送到log4j,以便将其发送到它的附加器


(但如果您总是担心性能-测试并测量它!)

因为每当我在开发过程中使用jetty运行我的应用程序时,如果它在发生更改时每10秒重新加载一次,则可以禁用它,如果您不知道,我们已经在jetty的最新版本中使用上述方法解决了许多此类问题。不是说它会解决你的问题,这就是为什么我只是在评论…但取决于正在发生的事情,它可能会有帮助。@mattb什么可以被禁用,如果每x秒有一个更改,重新加载?这就是我想要的……是的。将
scanIntervalSeconds
设置为0。但是,拥有运行时的依赖范围会产生什么影响?Maven pom.xml中的依赖范围对于应用程序何时运行并不重要。运行时只是意味着库不在编译类路径上,但它与war包捆绑在一起。因此,如果作用域是编译或运行时,那么“性能影响”就无关紧要了——在这两种情况下,JAR都与WAR捆绑在一起——因此,前面提到的问题是没有意义的。