당신은 당신이 사용할 수뿐만 아니라 로거를 증가시키고 각각 들여 쓰기를 감소하고, Debug
(및 Warn
, Error
등)가 반환하는 로거 자체에 대해 정의 된 ++
및 --
연산자를 가질 수 더 나은, (하지만 때문에 선행 증가에 괄호) 구문 아마 완벽하지 : [INC | DEC] 나에게
// Increment the indent, then log a message
(++_logger).Debug(msg);
// Log a message then decrement the indent
_logger.Debug(msg)--;
는이 사전을 사용한다는 점에서 약간 더 의미가 rement 운영자는 "말을하는지 [INC | dec] 들여 쓰기, 다음에 메시지를 기록 "하고 post- [inc | dec] rement 연산자 메시지 의미 " [inc | dec] 들여 쓰기"를 의미합니다.
public sealed class LogScope : IDisposable
{
private readonly Logger _logger;
public LogScope(Logger logger)
{
_logger = logger;
++_logger;
}
public void Dispose()
{
--_logger;
}
}
은 그럼 당신은 할 수 있습니다 : 다음과 같이
++_logger;
--_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");
나는 또 다른 문제를 해결하기 위해 IoC Ninject를 사용하고있다. Logger는 InSingeltonScope()이다. indentCount가 생성자에서 로거를 취하는 모든 새로운 클래스 내에서 0으로 리셋되기 때문에 정적 전역 싱글 톤을 갖는 것과 실제로 같지 않습니다. :/ – furier
'++ '를 들여 쓰기로 정의하고'--' 안 들려? 코드를 이해하고 유지하는 데 어려움을 겪게 될 것이므로이 경로를 따라 가지 말 것을 강력히 권합니다. 코드를 보면서이 모든'++'와'-'연산자를 볼 미래의 개발자는 WTF 순간을 가질 것입니다. – MattDavey
대신 LogScope 구현을 사용하고 ++ 및 - 연산자 오버로드 대신에 증가 및 감소 들여 쓰기를 유지했습니다. – furier