您可以为记录器本身定义++
and--
运算符以分别增加和减少缩进,并让Debug
(和Warn
等Error
)也返回记录器,然后您可以使用更好的,(但由于括号中的括号可能并不完美预增量)语法:
// 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");