2

特定のアプリケーションでは、現在のログ レベルの設定に関係なく、常にログに記録したい重要なメッセージ (アプリケーションの起動とシャットダウンなど) があります。log4jやなどのフレームワークを使用して重要なメッセージが確実にログに記録されるようにする唯一の方法はlog4net、発生するメッセージのログ レベルを に設定することFATALです。

FATALアプリケーションがエラーなしで正常に起動したときに誤解を招くカテゴリのように見えるので、これを行うためのより良い方法はありますか?

4

3 に答える 3

2

log4j の場合 (および log4cxx の場合も同様)、次のようにすることができます。

public class Always {
  private static Logger logger = Logger.getLogger("logAlways");

  public static void log(String message) {
      logger.info(message);
  }
}

次に、logAlways上記のすべてをログに記録するようにロガーを構成しINFOます。

log4j.logger.logAlways=INFO

これは、誰かが (意図せずに) 構成ファイルを変更することを避けるために、API を介して構成することもできます。

public class Always {
  private static Logger logger = null;

  static {
     logger = Logger.getLogger("logAlways");
     logger.setLevel(Level.INFO);
  }

  public static void log(String message) {
      logger.info(message);
  }
}

それを使用して、好き

Always.log("Starting up");
于 2013-01-18T10:31:43.723 に答える
1

log4net は、ログを記録する方法と場所に関するあらゆる種類の構成を提供します。作成するフィルターを作成し、特定のメッセージに特別なアペンダーを作成して、レベル情報のいくつかのメッセージをログに記録できます。あなたがやりたいことは、log4X フレームワークですでに可能です。これを行う方法については、ドキュメントを参照してください。

log4net マニュアル

ILog log = LogManager.GetLogger("MyAllwaysLogMessages");
log.Info(....

これで、MyAllwaysLogMessages をフィルター処理してログに追加できるようになりました。

于 2013-01-18T10:29:34.950 に答える
0

いいえ、常にログに記録されるようにするためだけに、メッセージ ログを利用可能な最高のログ レベルに設定するのは間違ったアプローチです。

まず、自分がなりたいものを明確にします。たとえば、アプリケーションの開始と停止をログに記録することが重要なのはなぜですか?

ロギングには複数の種類があることに注意してください。通常のログ記録は、開発者が何が問題なのかを調査する際に、何らかの助けになります。これはデバッグ ロギングであり、アプリケーションが機能するかどうかはロギング部分にとって実際には重要ではないため、通常はオプションです。デバッグは、可能であれば別の手段で行うことができます。

もう 1 つの種類のログは、監査ログです。ユーザーがログインまたはログアウトしたり、パスワードを変更したり、後で関心のあることを行ったりした場合、すべてのアクションが正しく開始され完了したことを確認できるようにするために、ログインする必要がある場合があります。

どの Log4X フレームワークも両方のロギング要件をサポートできる必要がありますが、違いは、それらを異なる方法で構成する必要があることです。監査ログでは、メッセージがログ アペンダーに送信されないようにすることはできませんが、アペンダーがデバッグ ログのアペンダーと異なる可能性が非常に高くなります。複数のロガーがあり、それらを別々に構成できるという事実を利用してください。

于 2013-01-20T16:03:51.997 に答える