0

ログステートメントをインデントする方法を探していました。SOで少しグーグルして検索した後、log4netのラッパー内にIndentクラスを実装して、ロガーステートメントのインデントを処理しました。

現在、インデントを増減するには、これらのメソッドを呼び出す必要があります。

_logger.Indent.Increase();
_logger.Debug(msg);
...
_logger.Indent.Decrease();

しかし、すべての関数内にこれらの 2 つの余分な行があると、コードが不必要に汚染されます。これをより良い方法で行うための構文キャンディーの方法はありますか、それともまったく別の方法で行う必要がありますか?

いずれにせよ、これはいいでしょう!:P

_logger.Debug(msg)++; //Increase indent for this logger statement and all to come.
_logger.Debug(msg)--; //Decrease Indent and logg...
4

2 に答える 2

2

ロガー自体に定義された++and--演算子を使用して、それぞれインデントを増減し、(Debugおよびなど)ロガーも返すようにすると、より適切なものを使用できます(ただし、括弧内の括弧のために完全ではない可能性があります) pre-increment)構文:WarnError

// Increment the indent, then log a message
(++_logger).Debug(msg);

// Log a message then decrement the indent
_logger.Debug(msg)--;

私にとってこれは、pre- [inc | dec] rement演算子を使用して、「[inc | dec]インデントを減らしてからメッセージログに記録する」と言っていることと、post- [inc|dec]を使用することで少し意味があります。 rement演算子は、「メッセージログに記録してから[inc|dec]インデントを減らす」ことを意味します。

これを行うと、次を使用して増分を調整することもできます。

++_logger;
--_logger;

次のように新しいクラスを定義することもできます。

public sealed class LogScope : IDisposable
{
    private readonly Logger _logger;

    public LogScope(Logger logger)
    {
        _logger = logger;
        ++_logger;
    }

    public void Dispose()
    {
        --_logger;
    }
}

次に、次のことができます。

_logger.Debug("This message is not indented");

using (new LogScope(_logger))
{
    // Anything logged within the using block will be indented
    _logger.Debug("This message is indented");
    using (new LogScope(_logger))
    {
        // LogScopes can be nested such that logging here will be double-indented
        _logger.Debug("This message is double-indented");
    }
    _logger.Debug("This message is back to single-indent");
}

// Logging here will revert to the original indent
_logger.Debug("This message is not indented");
于 2012-06-26T08:57:16.297 に答える
0

Debug 関数が loggers Indent オブジェクトを返すようにし、Indent クラス内に ++ と -- の静的な暗黙の演算子がある場合、まさにそれを行うことができます。そうですか?

于 2012-06-26T08:15:24.787 に答える