1

アプリケーションで、常に値をログに記録したい場所をいくつか選択しました。単に Log.Info() を使用してそのままにしておくこともできますが、レベル構成を誤って変更しても無効にできないソリューションが望ましいです。この場合、log4net が無効にされていない限り、これらのログ ステートメントを実行したいと思います。

最善のアプローチは何ですか?

いくつかの 情報を見ると、Emergency よりも高い値に設定されたカスタム レベルを作成することが 1 つのオプションのように見えますが、それが、私が気付いていない副作用を伴う非常にひどいハックなのか、それとも正当なオプションなのかはわかりません。ドキュメントに明確なガイダンスが見つかりませんでした。

4

1 に答える 1

1

私は log4net の専門家ではありませんが、次のようなものが必要な場合があります。

このコードは、LogManager から名前付きロガーを取得し、プログラムでそのレベルを「ALL」に設定します。コードの後半でこのロガーを取得すると、構成ファイルでログ レベルが OFF に設定されていても、常にログに記録されます。

テストするには、構成ファイルでルート ログ レベルを「OFF」に設定してから、以下のコードを使用します。

  log4net.ILog log = log4net.LogManager.GetLogger("abc");
  log.Info("this won't log because root logger is OFF");

  //Reset the level
  log4net.Repository.Hierarchy.Logger l = (log4net.Repository.Hierarchy.Logger)log.Logger;

  l.Level = l.Hierarchy.LevelMap["ALL"];

  //Try to log again
  log.Info("this will log because we just reset abc's level to ALL");

私はそれをテストしましたが、うまくいくようです。

この情報はこちらこちらで見つかりました。

于 2010-11-19T21:50:24.057 に答える