1

私は現在、C ++での私の研究のために、プロジェクト用の単純なロガーを実装しています。

いくつかの異なるアペンダーと次のステップは、冗長レベルを実装することであるため、私はすでにロガー基本クラスを取得しています。問題は、詳細レベルの概念を正しく理解しているかどうかわからないため、実装を開始する前にフィードバックを得たかったことです。したがって、私の理解では、冗長レベルは一般的に次のように機能します。

ユーザーは最初に 2 つの Logger を作成します: fe:

FileLogger fl; 
VSLogger vl;

その後、次のように詳細レベルを設定できます。

fl.setLoggerLevel(DEBUG);
vl.setLoggerLevel(FATAL_ERROR);

その後、次のように、必要に応じてログに記録できます。

fl.logg("New Object of Type .... created");
ASSERT(1,2, "1==2");

while assert は致命的なエラー レベルで VSLogger に書き込みます

出力ファイルでは、おそらく次のようになります。

13:36 Msg: New Object of Type .... created (LEVEL:DEBUG);

Visual Studio では、おそらく次のようになります。

13:36 Msg: Assert (1==2) failed (LEVEL:FATAL_ERROR)

それは冗長レベルの意味ですか、それとも一般的な冗長レベルの概念を誤解していますか?

4

2 に答える 2

2

ユーザーが 2 つのロガーを使用する必要がある理由がわかりません。消費するコードは、ロギング ターゲットを気にするべきではありません。

もう 1 つの問題は、消費するコードが重大度をどこにも渡さないことです。ロギング関数を呼び出すときはいつでも、重大度を渡します。消費するコードは、現在の冗長性が何であるかを気にしません。重大度を渡すだけで、重大度が冗長性レベルを超えているかどうかを知るためにロガーの実装に依存します。(このルールには例外があり、詳細レベルをチェックして、高性能コードでログ メッセージを作成するオーバーヘッドを回避します)

ユーザーとして 1 つのロガーを使用し、出力を 2 つ添付して、詳細レベルが異なる場合があります。

Logger& GetLogger()最も単純なケースでは、次のようなユーザー コードにつながるグローバル関数を作成します。GetLogger().LogDebug("New Object of Type .... created");

最初にインターフェイスを作成します。

public class ILogger
{
  public:
    virtual LogDebug(string message)=0;
    ...
}

次に、サブスクリプションをサポートするインスタンスを 1 つ作成します。

public class DispatchingLogger:ILogger
{
  private:
    vector<ILogger*> loggers;
  public:
    override LogDebug(string message)
    {
      foreach(ILogger logger in loggers)
      {
        logger.LogDebug(message);
      }
    }

    void Subscribe(ILogger* logger)
    {
      loggers.add(logger);
    }
}

次に、グローバルGetLogger()関数は の 1 つのインスタンスを返しますDispatchingLogger。また、さまざまな詳細レベルでいくつかの実装をサブスクライブできます。また、実装するユーザー クラスもILogger登録できます。

(C++ の構文が正しくないことはわかっています。C++ を使用してから少し経ちます)

于 2011-12-24T13:21:33.943 に答える
0

詳細レベルは、ログに記録するメッセージ (または、重要度) を示します。

例えば

Set verbosity to INFO
Log a trace message  //the message will not be logged
Log a debug message  //the message will not be logged
Log an info message  //the message will be logged
Log a warning        //the message will be logged
Log an error or a fatal error.  // will be logged
于 2011-12-24T13:16:28.283 に答える