私は現在、いくつかのネットワーク監視ツール用のJavaアプリケーションに取り組んでいます。私のコードでは、ロギングを頻繁に使用することになっています。ネットワーク管理ソフトウェアであるため、ログ内の情報はユーザーにとって非常に有用であり、したがってそれらを使用する必要があります。しかし今、私はどのようなロガー方式を好むべきかについて少し混乱しています。今使っていますLogger.lop(...//...)
その助けを借りて、クラス名とメソッドもログに記録しているので、私(開発者)がコードをデバッグしてエラーを見つけるのが非常に簡単になります。しかし、最後に、同じロギングメカニズムでエンドユーザーに配信する必要があるので混乱していますか?どの種類のクラスが現在実行されているか、どのメソッドエラーが発生したかをユーザーに知らせることは害になりますか?多くの製品で例外処理のスタックトレースが使用されているのを何度も見てきたので、通常はクラス名も取得します。それで、エンドユーザーにあなたのクラス名とメソッドが何であるかを知らせるのに問題はありませんか?
3 に答える
そのセキュリティへの影響を検討する前に、パフォーマンスを検討してください。ほとんどのロギングシステムでは、ロギング機能によって実際のクラス名とメソッド名を動的に取得するには、リフレクションが必要であり、ロギングが大幅に遅くなります。通常は同期操作です。私の推測では、ネットワーク監視アプリケーションでは、それは本当に望ましくありません。
メソッド名をログメッセージにハードコーディングしている場合(メッセージの一部にするか、カテゴリ別に)、それは別の話です。セキュリティ担当者として、私はそれがそれほど大きな問題であるとは考えていません-コードがJavaである場合、それはとにかく逆にすることができるので、コードはコードが安全であっても安全であるように動作する必要があります与えられました。
そうは言っても、開発と本番環境に異なるログ構成を使用するか、それらのきめ細かいメッセージをデバッグやトレースなどに使用することができます。log4jを使用している場合は、通常isDebugEnabled
、ログステートメントをラップするために使用することをお勧めします。これには、loggingステートメントが有効かどうかを判断する前に計算されるため、動的に計算されるものが含まれます。
このようなロギングは、通常プリプロセッサで実装されるC ++とは対照的に、Javaではパフォーマンスが高くつくことに言及する価値があります。幸い、log4j / logbackを使用すると、オンとオフを切り替えることができます—Bozhoのアドバイスに従ってください。