2015-01-13 4 views
0

로깅 프레임 워크 (log4net, NLog 등)를 살펴볼 때, 대부분은 매우 기본적인 인터페이스를 따르고 있습니다. Common.Logging 인터페이스는 로깅 프레임 워크와 코드간에 어댑터 및 기타 등을 사용하여 추상화 및 단일 계약을 생성하는 데 유용합니다.래핑 로깅 프레임 워크

애플리케이션 로깅에 대한
void Trace(object message); 
void Debug(object message); 
void Info(object message); 
void Warn(object message); 
void Error(object message); 
void Fatal(object message); 

, 우리가 뭔가 더 표현 및 명시 적 싶지 않을 것이다 : Common.Logging는 다음과 같은 인터페이스 (아래 요약)를 제공?

예를 들어 더 많은 필드를 기록 할 수 있습니다. 아마도 "방법"또는 "컨텍스트"필드가 필요합니까? 어쩌면 나는이 방법의 명명 규칙을 정말로 좋아하지 않을 것입니다. 그들은 동사가 아닙니다. 우리 표준을 위반하는 것. 이것은 또한 너무 많은 유연성을 제공합니다 - 각 개발자가 로깅을 어떻게 처리할지 알고 있습니다. 이러한 이유로

, 나는 더 명시 적으로 뭔가 Common.Logging 포장 안넘어 :

void LogTrace(string context, string message, string parameters); 
void LogDebug(string context, string message, string parameters); 
void LogInfo(string context, string message, string parameters); 
void LogWarning(string context, string message, string parameters); 
void LogError(string context, string message, string parameters); 
void LogError(string context, string message, string parameters, Exception ex); 
void LogFatal(string context, string message, string parameters); 
void LogFatal(string context, string message, string parameters, Exception ex); 

이는 것이 좋습니다 이러한 접근 방식에 대한 단점이있다?

+0

나는 이점을 보지 못했다. 당신이 지정한 것을 추상화하지 않습니다. 객체 메시지가있는 메소드는 가능한 한 추상적입니다. 물론 당신은 그 위에 API를 놓아서 타입 - 안전한 API를 얻을 수있다. 메시지가 문자열로 직렬화 될 것이므로 명시적인 매개 변수가 필요한 이유는 무엇입니까? 익명 유형 또는 "LogMessageType"을 사용하십시오. 로깅을 위해 새로운 API를 작성하십시오. 그러나 애플리케이션별로 다르며 "추상적"이 아닙니다. 다음을보십시오 : https://github.com/damianh/LibLog –

+0

@StefanOssendorf : 사과. 업데이트 된 질문. 나는 본질적으로 포장하지 않고 포장하고 싶다. – davenewza

답변

1

다른 로깅 프레임 워크를 래퍼로 사용하면 로깅 프레임 워크의 공통 기능 만 사용하게됩니다. 각 로깅 프레임 워크에는 강점과 약점이 있으며 대부분의 경우 로깅 요구 사항을 기반으로 로깅 프레임 워크를 선택하고 해당 시점을 확인해야합니다.

+0

수정하십시오. 그것을 넣는 또 다른 방법. 추상적 인 버전 (Common.Logging)을 사용하면 콘크리트 라이브러리 (예 : NLog 또는 Log4Net)의 "보다 정확한"기능 중 일부가 손실됩니다. 따라서 어느 것이 더 중요한지 고르도록해야합니다. 우리는 Common.Logging을 사용하고 특정 콘크리트 (우리 세계에서 NLog)를 사용하는 소량의 "손실"을 수용했습니다 .... – granadaCoder

1

을 Fody로 Common.Logging 대신 고려하셨습니까? Trace, Debug, Fatal 등의 각 메소드에는 예상되는 'message', 'params'및 'exception'오버로드가 있습니다. Common.Logging과 마찬가지로 로깅 라이브러리간에 쉽게 전환 할 수 있습니다.