1

指定したレベル番号で有効/無効にできる、さまざまなログ レベルを持つ多くのアプリケーションを見てきました。

たとえば、ログ レベル 1 には最も多くの詳細があり、多くの詳細が出力されます。レベル 2 は詳細度が低く、レベル 3 はさらに詳細度が低く、レベル 4 はロギングを完全に無効にします。

Cアプリケーションでそれを実装する方法についてアドバイスしてもらえますか?

4

1 に答える 1

2

それは基本的にすべてロギング機能に帰着します。次のようになります。

#define LOG_ALL       0
#define LOG_DEBUG     1
#define LOG_INFO      2
#define LOG_WARN      3
#define LOG_ERROR     4
#define LOG_FATAL     5
#define LOG_NEXTFREE  6

static unsigned int threshold = LOG_WARN;

void logIt (unsigned int level, char *message) {
    if (level >= threshold)
        puts (message);
}

つまり、ログ機能は、メッセージのレベルがログのしきい値を超えるのに十分な場合にのみメッセージを出力します。次のようなもので呼び出します。

logIt (LOG_INFO, "process starting");
logIt (LOG_FATAL, "cannot read boot sector");

デフォルトのしきい値 (警告) では、後者は表示されますが、前者は表示されません。

追加する必要があるのは、しきい値を動的に変更する方法だけで、ログに記録されるものに影響を与えることができます。

void getAndChangeLevel (unsigned int newLevel) {
    if (newLevel < LOG_NEXTFREE)
        threshold = newLevel;
}

もちろん、他にも望ましいと思われるあらゆる種類機能があります。質問された特定の概念を説明するために、コードをシンプルに保つように努めました。

于 2013-02-01T00:34:16.340 に答える