0

サンプル アプリケーションから、彼らは slf4j を使用しており、依存関係の範囲はランタイムです。

これによるパフォーマンスへの影響はありますか、それともアプリケーションの起動中に 1 回限りのヒットですか?

            <!-- 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 に追加しています。

実際には、slf4j も commons-logging も log4j の前ではあまり機能しないため、この種のことは実際には影響を与えません (commons-logging に加えて slf4j を使用し、どちらも log4j にディスパッチします)。彼らは基本的にメッセージをlog4jに送信して、アペンダーに送信します。

(ただし、パフォーマンスが心配な場合は、いつものように、テストして測定してください!)

于 2012-10-01T21:01:02.673 に答える