0

我正在寻找一种方法来缩进我的日志语句。在进行了一些谷歌搜索和搜索之后,我在我的 log4net 包装器中实现了一个 Indent 类来处理我的记录器语句的缩进。

现在我需要调用这些方法来增加和减少缩进。

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

但是在每个函数中都有这两条额外的行等等会不必要地污染代码。是否有一些语法糖果方法可以更好地做到这一点,或者我应该以完全不同的方式做到这一点?

无论如何,这会很好!: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(和WarnError)也返回记录器,然后您可以使用更好的,(但由于括号中的括号可能并不完美预增量)语法:

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

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

对我来说,这更有意义,因为使用 [inc|dec]rement 之前的运算符你说“[inc|dec]rease the indent, then log a message”,而使用 [inc|dec]之后的rement 运算符的意思是“记录一条消息,然后[inc|dec]rease the indent”。

这样做还允许您使用以下方法调整增量:

++_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 回答