0

Log4jロギングフレームワークを使用してログをOracleデータベースに挿入していますが、log4jプロパティファイルの挿入クエリは実行に時間がかかり、アプリケーションが非常に遅くなります。Javaコードからロギングステートメントを削除すると、アプリケーションは正常に動作しました。最初はデータベースへの挿入に時間がかかると思いましたが、外部ファイルへのログの書き込みにも時間がかかります。

誰かが解決策を提案できますか?

ありがとう、ダヴァル・マヘシュワリ。

4

3 に答える 3

2

アプリケーションが開発中の場合、ログ レベルは である必要がdebugあり、ログを記録する前に isDebugEnabled() を確認してから、文字列をログに記録する必要があります。

ただし、アプリケーションが本番環境にある場合、ログ レベルは である必要がinfoあり、最小限の情報をログ ファイルに記録する必要があります。

アプリケーションでは常に少なくとも 2 つのログ レベルを使用してください。

これにより、アプリケーションを高速化できます。

次に、ログをデータベースに永続化したい場合は、scheduler taskログをフラット ファイルから読み取ってデータベースに永続化し、1 日に 1 回だけ実行するようにスケジュールします。

于 2012-07-17T05:34:27.333 に答える
1

現在フォローしているテクニックには従わないことをお勧めします。

まず第一に、log4j の出力を DB に記録しようとする理由がわかりません。とにかく、それが必要な場合は、このようなことを試してください。ログファイルをそのままファイルに書き込み、後でスレッドを実行して、ファイルがデータベースに対してバッチ プロセスとして閉じられたときに、このファイルをディスクからダンプします。

この場合、アプリケーションは DB のレイテンシーから切り離されます。

JMS を使用する他のソリューションもあります。JMSキューに書き込むことができ、一方でコンシューマーはキューを読み取ってDBに書き込むことができます。

ただし、解決しようとしている問題の種類によって異なります。

それの参照が役立ちます

于 2012-07-17T05:34:46.087 に答える
0

Logging にはレベルが含まれています。たとえば、本番環境では、アプリケーション レベルの例外とエラーのみをログに記録します[ERRORレベル]。

ログ(ユーザーアクションなど)を追跡している場合は、それらをファイルに書き込まず、データベースに直接追加します。お役に立てれば。

于 2012-07-17T05:31:39.633 に答える