log4j.properties ファイルで、レベルを ERROR に設定しました。特定のユーザーについては、Level を DEBUG に設定する必要があります。実行時にログ レベルを変更できましたが、これは、アプリケーションに同時にアクセスするすべてのユーザーに対して有効になります。選択したユーザーのログを有効にする他の方法はありますか? どんな助けでも大歓迎です。
3 に答える
Web アプリケーションまたは類似のアプリケーションがあり、複数の識別可能なユーザーが同時にアクセスしていると思いますか?
Log4j では、ユーザーごとに構成を簡単に変更することはできません。ただし、次のことを検討します(これは、各ユーザー要求が個別のスレッドにあるWebサーバーまたは同様のものを想定しています):
- ユーザーがサーバー呼び出しを行うとすぐに識別します。そのユーザー データをMDCに格納する
- カスタム Log4Jアペンダーを実装します。着信コールごとに、MDC に保存されているユーザーを検査し、必要に応じて重大度/ログを調整できます。
(上記の仮定を考えると)少し手間がかかりますが、うまくいくはずです。あなたのアーキテクチャについて私が行った仮定が正しくない場合、明らかにそれは有効ではありません。
この問題は、TurboFilters を使用した logback (log4j の後継) で解決されています。「MDCFilter および MarkerFilter 構成」というタイトルの例を参照してください。さらにヘルプが必要な場合は、logback-user メーリング リストに連絡してください。
はい、でも。
クラスだけでなく、関連するクラス + ユーザーで名前を付けたロガーを作成し、メソッドでロガーを作成することができます (または、ファンシーにしたい場合は、ユーザーによってキーが設定された何らかの種類のプールにロガーをキャッシュします)。適切にロギングします。
それは非常に面倒でコードに侵入しますが、ユーザーはランタイム プロパティであるため、(AspectJ やそのいとこを除けば) そのような混乱を回避する方法がわかりません。
もう 1 つのオプションは、ログ メッセージを特別にフォーマットし、ログ メッセージにユーザー名を含め、後でログを解析することです。これにより、誰でもデバッグが可能になります (明らかにパフォーマンスの問題になる可能性があります) が、デバッグ呼び出しの量を制限することよりも、ユーザー ログを分離することに関心がある場合は、それが解決策になる可能性があります。