문제

우선, 주관적인 소리 제목에 대해 사과합니다. 이것은 직접적인 질문입니다.

현재 나는 일련의 도구를 연구하고 있습니다.

  • AC# Windows Service, 주로 Oracle 데이터베이스를 유지 관리합니다.
  • AC# Windows Service (여러 노드 사이트에서 사용될) 데이터베이스의 컨텐츠를 처리합니다.
  • 전체 "시스템"의 관리를 용이하게하기위한 ASP.NET 웹 인터페이스

현재 THO Windows 서비스는 콘솔 애플리케이션 (디버깅/개발을 용이하게하기 위해)으로 개발되었으며 서비스를 서비스로 변환하는 중입니다. 이 서비스로 며칠 동안 테스트 한 후, 나는 벌목의 세분성을 높이고 싶다는 것을 알게되었습니다. Console.writeline ()을 놓치고 있으며 이러한 유형의 출력에 대한 플랫 파일과 같은 대체 로그 소스를 제공하고 싶습니다. 이것은 "프레임 워크를 사용해야합니까, 아니면 충분히 얻었습니까?"라고 생각하게 만들었습니다.

내가 개발하고있는 측면을 언급 한 이유는 내 상황에 대한 통찰력을 제공하는 것입니다. "Core"DLL이 모든 구성 요소에서 공통적으로 생성되어 응용 프로그램과 데이터베이스 간의 상호 작용 계층을 추상화했습니다. 이 DLL 내에서 클래스가 만들어졌으며 "데이터베이스의 테이블에 로그인"다른 "로그인으로 로그인으로 로그 로그 로그인". 이것이 바로 로깅의 정도입니다.

앞서 언급 한 도구 전체에 걸쳐 다음과 같은 여러 가지 로깅 인스턴스가 있습니다.

Log.LogError("Code", e.Message + "\n" + e.StackTrace);

매우 기본적이지만이 방법은 반사를 사용하여 오류의 소스를 식별합니다.

내 질문

내 현재 로깅 솔루션을 살펴보면 그것이하는 일과 그것이 내 모든 솔루션과 어떻게 통합되는지에있어서 "충분한"것으로 보입니다. 그러나 나는 로깅 프레임 워크 (특히 log4net)를보고 있었고 그들의 기능은 저에게 깊은 인상을줍니다. 미래에 필요한 경우 다른 출력 형식 (예 : SMTP 서버)을 추가 할 수있는 기능은 나에게 멋진 소리를냅니다! :)

내가 알고 싶은 것은 Framework (log4net과 같은)로 이동하면 이점이 있습니까? 내 코드를 얼마나 적응 해야하는지의 정도? 내가 반대편의 녹색 잔디를보고 있는지 여부? 그리고 마지막으로, 그러나 아마도 가장 중요한 것은 내가 옳은 일을하고 있습니까? 로그 클래스에 "logdebug"에 기능을 추가하고 완료해야합니까? 마지막으로하고 싶은 것은 "기본"기능만으로 스위트를 완전히 점검하는 것입니다. 그러나 다른 이점이 있다면 (설계, 의존, 모범 사례 등) 관심이 있습니다.

감사,

도움이 되었습니까?

해결책

적절한 로깅은 여러 원격 시스템에서 코드를 실행할 때 특히 유리합니다. 내가 기억하는 한 Log4Net은 코딩 오버 헤드없이 로그를 원격 Syslog 서버로 보낼 수 있습니다 (즉, 하나의 중앙 집중식 장소에서 모든 기계에서 로그를 볼 수 있습니다). 이렇게하면 시스템의 버그 또는 문제와 관련된 정보를 얻는 데 걸리는 시간이 크게 줄어들고 문제가 얼마나 널리 퍼져 있는지에 대한 표시를 제공해야합니다.

다른 게시물에서 언급했듯이 Log4Net은 여러 부속기 및 여러 로그 레벨을 허용하므로 특정 로그 정보를 원하는 위치를 결정하면 (즉, 데이터베이스 또는 로컬 플랫 파일에서 Hey Log4Net도 Telnet을 통해 로그를 뱉어 낼 수 있습니다) 저장된 것은 절대적인 doddle입니다.

구현에 관해서는 설정을 통해 여러 가지 좋은 사이트가 있습니다. 실제로 Log4Net이 제공하는 로깅 오브젝트를 사용하는 방법은 아키텍처 선택이지만 객체의 생성자를 변경하여 Log4Net 객체를 가져 와서이 개체 내에서 Console.WriteLine과 같이 Log4Net 객체를 사용하십시오. .

튜토리얼 시리즈를 찾습니다 여기 특히 유용하며 Log4Net을 구성하는 이점과 다양한 방법에 대해 여기에서 할 수있는 것보다 더 깊이 들어가게됩니다.

다른 팁

예. 기존의 입증 된 로깅 프레임 워크 (예 : log4net)를 사용하는 것이 좋습니다.

LOG4NET은 런타임에 구성 가능합니다 (생산 코드에서 문제를 추적하는 데 적합함).

의견 제시자가 지적했듯이 사용하기도 매우 간단합니다.

예, 로깅 프레임 워크를 사용하고 싶습니다. 로깅 프레임 워크를 사용하면 다음을 수행 할 수 있습니다.

  • 다른 로거 인스턴스의 로깅 레벨을 설정하십시오.
  • 각각의 다른 로거 인스턴스에 대해 "부록"또는 출력을 설정하십시오.

아마도 더 중요한 것은 로깅 프레임 워크를 사용하는 경우 로깅 프레임 워크의 하나의 구현을 다른 로깅 프레임 워크 (메시지를 단순히 버리는 널 구현)를 교체하는 것이 매우 쉽다는 것입니다. 반면, 모든 로깅 진술을 직접 작성하면 직접 구현을 교체하는 것이 악몽이 될 것입니다.

나는 당신이 자신의 물건을 만드는 것보다 항상 재사용하는 것이 낫기 때문에 log4net을 사용해야한다고 생각합니다. LOG4NET은 많은 개발자가 사용했으며 꽤 성숙했습니다.

유지 보수 전망에 대해 생각하십시오. 1 ~ 2 개월이 지나면 멀티 스레딩 지원 등을 추가하려면 사용자 정의 로깅 클래스 A를 약간 조정해야 할 수도 있습니다. 로깅 클래스에서 버그가 발생하면 Log4Net을 놓치게됩니다.

더 큰 이점 중 하나는 코드를 직접 유지할 필요가 없다는 것입니다. 대부분의 경우 로깅 프레임 워크는 자신의 솔루션보다 훨씬 많은 기능을 갖추고 있습니다. 로깅에 너무 집중되어 있기 때문에 이러한 프레임 워크는 일반적으로 기능과 구현 방법 모두에서 매우 완전합니다. 그리고 신뢰성이 있습니다. 벌레가 되었기 때문에 로깅 프레임 워크보다 더 나쁜 것은 없습니다. ;)

예를 들어 보자 엘마 ASP.NET 응용 프로그램 용. 또한 알림, 다양한 대상 형식으로의 내보내기 등이 포함되어 있습니다. 매우 편리하지만 실제로 필요하지 않으면 결코 자신을 구축하지 않을 것입니다.

코드의 변경 사항 수는 코드와 선택 프레임 워크 모두에 달려 있습니다. 그것에 대해 아무 말도하기가 어렵습니다.

나는 nlog에게 외침을 줄 것이다.http://nlog-project.org/home) 대부분의 OSS .NET LIBS의 'Straight Java Port- 다시 작성'증후군으로 고통받지 않기 때문에.

우리의 주요 장점은 매우 빠른 Logger.Isfooenabled (휘발성 읽기)와 시스템의 전반적인 성능이었습니다.

그래도 각자의 프로젝트 (및 일부 고객도)에 대한 NLOG를 개인적으로 선호합니다.

건배, 플로리안

log4net과 같은 우수한 로깅 프레임 워크를 사용하는 장점은 변경 해야하는 코드 라인 측면에서 코드에 약간의 영향을 미친다는 것입니다 (즉, 기존 로깅 라인을 변경하면됩니다).

또한 프레임 워크를 변경하는 경우 코드 변경에 관심이 있거나 자신의 롤을 롤링하고 싶다고 생각되면 항상 자신의 인터페이스를 만들 수 있습니다. 로깅 프레임 워크. 그러면 그 후 한 곳에서 코드를 변경하면됩니다.

Sysadmins는 서비스가 응용 프로그램 이벤트 로그인 Windows에 로그인하기를 기대한다고 생각합니다.

log4net도 그에 쓸 것이지만 system.diagnostics.eventLog를 찾아보십시오 ..

초기 진술 Log4J 웹 사이트 일부 질문에 도움이 될 수 있습니다. 기본 원칙은 log4net과 동일합니다.

log4J를 사용하면 응용 프로그램 바이너리를 수정하지 않고 런타임에 로깅을 활성화 할 수 있습니다. Log4J 패키지는 성능 비용이 많이 들지 않고 배송 된 코드로 유지할 수 있도록 설계되었습니다. 로깅 동작은 응용 프로그램 바이너리를 터치하지 않고 구성 파일을 편집하여 제어 할 수 있습니다.

로거 계층을 사용하여 임의로 미세한 세분성에서 출력되는 로그 문장을 제어 할 수 있지만 쉽게 쉽게 쉽게 쉽게 쉽게울립니다. 이를 통해 기록 된 출력의 양을 줄이고 로깅 비용을 최소화하는 데 도움이됩니다.

이 경우 바퀴를 재발 명 할 필요가 없습니다. 대부분의 로깅 프레임 워크는 다소 간단하므로 변경 확장은 기존 프로그램의 크기에 따라 달라집니다.

로거 클래스를 올바르게 작성하면 귀하의 요구에 따라 쉽게 소비 할 수 있습니다. 모든 프레임 워크는 많은 기능으로 당신에게 깊은 인상을 줄 수 있지만 다른 프레임 워크는 디버깅 프로세스의 또 다른 변수입니다. 응용 프로그램과 함께 존재하지 않거나 자체적으로 오류가 발생할 수있는 오류가 발생할 수 있습니다. 오픈 소스 소프트웨어 프로젝트에 대한 베타 테스트를 할 준비가된다면 괜찮습니다 ...

당신의 장소에서 나는 알려진 프레임 워크가 가지고있는 기능 목록을 기반으로 당신에게 흥미로운 기능을 찾는 기능을 확장 할 수있는 로그 클래스를 작성합니다. 나는 무언가를 로그인 한 다음 SMPT를 통해 그것을 보내는 데 아무런 문제가 없습니다. 단 하나의 작은 기능 만 작동합니다.

또한, 테스트를 위해 외부 프레임 워크를 사용해야한다면, 클래스에 최소한의 코드에 영향을 미치면서 사용할 수 있습니다. 코드 수준에서 프레임 워크가 어떻게 구현되는지 살펴보십시오.

지금 당신의 유일한 부분이 그것의 아주 작은 부분을 기록해야 할 때 이러한 프레임 워크를 올바르게 사용하는 방법을 배워야한다고 생각하십시오 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top