Log4jロギングフレームワークを使用してログをOracleデータベースに挿入していますが、log4jプロパティファイルの挿入クエリは実行に時間がかかり、アプリケーションが非常に遅くなります。Javaコードからロギングステートメントを削除すると、アプリケーションは正常に動作しました。最初はデータベースへの挿入に時間がかかると思いましたが、外部ファイルへのログの書き込みにも時間がかかります。
誰かが解決策を提案できますか?
ありがとう、ダヴァル・マヘシュワリ。
アプリケーションが開発中の場合、ログ レベルは である必要がdebug
あり、ログを記録する前に isDebugEnabled() を確認してから、文字列をログに記録する必要があります。
ただし、アプリケーションが本番環境にある場合、ログ レベルは である必要がinfo
あり、最小限の情報をログ ファイルに記録する必要があります。
アプリケーションでは常に少なくとも 2 つのログ レベルを使用してください。
これにより、アプリケーションを高速化できます。
次に、ログをデータベースに永続化したい場合は、
scheduler task
ログをフラット ファイルから読み取ってデータベースに永続化し、1 日に 1 回だけ実行するようにスケジュールします。
現在フォローしているテクニックには従わないことをお勧めします。
まず第一に、log4j の出力を DB に記録しようとする理由がわかりません。とにかく、それが必要な場合は、このようなことを試してください。ログファイルをそのままファイルに書き込み、後でスレッドを実行して、ファイルがデータベースに対してバッチ プロセスとして閉じられたときに、このファイルをディスクからダンプします。
この場合、アプリケーションは DB のレイテンシーから切り離されます。
JMS を使用する他のソリューションもあります。JMSキューに書き込むことができ、一方でコンシューマーはキューを読み取ってDBに書き込むことができます。
ただし、解決しようとしている問題の種類によって異なります。
それの参照が役立ちます
Logging にはレベルが含まれています。たとえば、本番環境では、アプリケーション レベルの例外とエラーのみをログに記録します[ERRORレベル]。
ログ(ユーザーアクションなど)を追跡している場合は、それらをファイルに書き込まず、データベースに直接追加します。お役に立てれば。