2011-03-01 3 views
3

.NET에서 로깅에 대해 묻는 질문을 검토하고있었습니다. 응용 프로그램과 선택한 로깅 프레임 워크 간의 느슨한 결합을 만들기 위해 로깅 facades 사용에 대한 게시물이 많이있었습니다. 이것은 로깅 프레임 워크를 검토하기 전까지는 직설적이었습니다. 흥미로운 기능이있는 Common.Logging을 살펴 보았지만 개발이 중단 된 것처럼 보입니다. 그리고 캐슬 윈저 (Castle Windsor)를 살펴 봤지만 로깅 인터페이스를 추상화하기를 원한다면 과도한 것으로 보입니다.어떤 로깅 정면을 고려해야합니까?

내가 찾은 대부분의 질문은 나이가 많아서 풍경이 다소 바뀌기를 바라고 있습니다. "올바른"정면에 대한 합의가 있습니까? 아니면 그냥 총알을 물고 로깅을 직접 구현해야합니까?

감사합니다.

답변

7

다른 사용자가 사용하고 특정 로깅 구현을 강요하지 않으려는 라이브러리를 개발하는 경우에만 로깅 정면 사용을 고려해야합니다. 저는 Commons를 사용했습니다. 과거에 이런 목적으로 문제없이 로깅했는데, 개발이 끝난 것처럼 보입니다. 그것은 로거 (NLog 2.x)를 지원하지 않았고, 그것을 작동 시키려면 소스 코드를 컴파일해야했습니다. (잠시 동안 코드를 작성해야한다면 기억하지 못하지만, 관심있어).

즉, 로거를 직접 사용하는 것이 좋습니다. 공통적 인 (가장 낮은 수의 분모) 하위 세트가 아닌 전체 API에 액세스하고 간접적 인 계층과 라이브러리 의존성을 피할 수 있습니다.

NLog 또는 log4net을 사용하는 것이 좋습니다. XML 정글에 신경 쓰지 않는다면, 엔터프라이즈 라이브러리 또한 적절한 로깅 블록을 가지고 있습니다. 내장 된 추적 API를 사용하지 마십시오. 사용 및 구성이 까다 롭지 만 다른 것들과 비교할 때 유연성이 거의 없습니다.

+0

제안 해 주셔서 감사합니다. 이것은 내가 기울고있는 방향 이었지만, 나는 온전한 검사에 감사한다. – Jacob

0

로깅을 위해 .NET Framework에서 Trace 클래스를 사용합니다. 간단하고 유연하며 소란스럽지 않으며 설명하는 디커플링을 제공합니다. 코드의 조건부 기호로 끌 수도 있습니다.

2

로깅은 표면에서 기대하는 것보다 덜 쉽습니다. 따라서 직접 구현하면 원하는 경로가 아닐 수도 있습니다. 큰 질문은 외관에 대한 필요성입니다. 좋은 로깅 프레임 워크는 사용자 정의 로깅 코드에도 연결할 수있는 많은 고리를 제공합니다.

우리는 지브롤터 소프트웨어와 함께 log4net : http://logging.apache.org/log4net/을 사용합니다 (라이브 설치 보고서를 얻을 수 있도록) http://www.gibraltarsoftware.com (상업적으로, 나는 고객과 관련이 없으며 단지 고객입니다). log4net을 사용하면 기존 appenders를 많이 사용하거나 custom appenders를 작성할 수 있습니다.

+0

필자는 필자가 모범 사례로 인식 한 것에 대해이 시점에서 어떤 특별한 필요성이 있기 때문에 그것을하려고 시도하지 않았습니다. – Jacob

관련 문제