如果我仍然登录到文件,禁用 Logback 控制台附加程序是否会提高性能?

Will disabling Logback console appender increase performance if I log to file anyway?

如果我使用 FileAppender,禁用 Logback 控制台附加程序是否会以任何方式提高性能?

我使用带有 Logback 的 PlayFramework 2.3 作为日志记录框架。 我必须将应用程序日志存储在相对较慢的文件中。 禁用标准控制台附加程序以提高日志记录性能是否有意义,或者这是否是过早的优化?即使启用了控制台记录器,记录器性能对我来说也不是问题。我只是好奇在这种情况下是否重要。

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${application.home}/logs/application.log</file>
    <encoder>
        <pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern>
    </encoder>
</appender>

禁用此附加程序 ???

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%coloredLevel %logger{15} - %message%n%xException{5}</pattern>
    </encoder>
</appender>

肯定会提高性能,但是"how much"只是你可以衡量的。另一点是,你不应该在更高的环境中登录控制台,这对 DEV 来说是可以的,但是一旦你在不同的环境中,它就没有多大意义,因为你可以在同一台服务器上部署多个应用程序你会被淹没。在这种情况下,记录到文件是有意义的,这是推荐的方式。

希望对您有所帮助。

您确实应该在生产环境中禁用控制台附加程序。 如本 blog 所述:

Java logging severely affects performance of your application. Its quite common sense that more you log, more you perform file IO which slows down your application.

然后您必须仔细选择您在生产环境中记录的级别(最好是 WARN 级别)。

并且在文件附加器中也会影响您的性能,使用本机 asynchronous logback appender 以确保不会阻塞您的应用程序线程:

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>${application.home}/logs/application.log</file>
        <encoder>
            <pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern>
        </encoder>
    </appender>

    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="FILE" />
    </appender>

    <root level="WARN">
        <appender-ref ref="ASYNC" />
    </root>
</configuration>