2008-09-27 2 views
15

여러분의 애플리케이션에 로깅 프레임 워크를 사용하지 못했을 것으로 생각됩니다. 모든 작은 응용 프로그램에서 저는 항상 작은 "로깅"클래스를 작성하고 로그 메시지를 파일에 작성된 메소드에 전달합니다.로깅 프레임 워크 사용의 요점은 무엇입니까?

log4net과 같은 타사 로깅 프레임 워크의 목적은 무엇입니까? 쓰기 작업을 로깅 할 때 스레드 안전성이 필요한지 또는 누락 된 것이 있습니까?

답변

18

훌륭한 질문입니다.

첫 번째 이유는 "왜 안 되니?"입니다. 로깅 프레임 워크를 사용하는 경우 이미 패키지 된 것을 사용하여 유지 보수 이점을 얻을 수 있습니다.

두 번째 이유는 로깅이 미묘하다는 것입니다.다른 스레드, 세션, 클래스 및 객체 인스턴스가 모두 로깅에 영향을 미칠 수 있으므로이 문제를 즉시 파악할 필요가 없습니다.

세 번째 이유는 코드에서 성능 병목 현상을 발견 할 수 있기 때문입니다. 로거가 롤오버하지 않고 오래된 파일을 압축하면 목에 통증이 생길 수 있으므로 버퍼링을하지 않고 파일에 쓰거나 하드 드라이브의 디스크 공간이 부족하여 코드가 느리다는 것을 알 수 있습니다.

네 번째 이유는 syslog에 추가하거나 데이터베이스 나 소켓 또는 다른 파일에 쓸 수 있기 때문입니다. 프레임 워크에는이 기능이 내장되어 있습니다.

하지만 실제로는 첫 번째 대답이 가장 좋습니다. 자신의 글을 쓰는 데는 별다른 이점이 없으며, 많은 단점이 있습니다.

3

일부 메시지에 대한 dB, 또는 페이지 경고 발생 시스템에 로그로 전환 할 수 있습니다 지원에 가난한 사람

이 더 중요하지만, 대부분의 로깅 프레임 워크는 당신이 그렇게 다른 클래스의 로그 레벨을 지정할 수 당신은 얼마나 똑똑한 당신의 자신의 로깅 시스템 구현에 따라이

Log4Net's site이 있습니다 자세한 내용

1

더/덜 로깅 (방금 생산에 발견 버그에 대한 그 자세한 로깅)을 원하는 새로운 바이너리 각 시간을 줄일 필요가없는 입니다.

Java에서 로그 유형 등을 상속하려면 너무 많은 번거 로움이 있으며 Log4J와 같은 타사 도구를 선호합니다. 나는 C#과 비슷한 것들이 있다고 가정한다. 마찬가지로 명령 행에서 로그 레벨을 판별하려는 경우.

모든 System.out을 라우트하고 컴파일 할 때마다 인쇄할지 여부를 제어하려는 경우 자신의 로거가 정상적으로 작동합니다.

2

단어 : 유연성. Log4xxx는 서로 다른 로깅 레벨을 수행하고 서로 다른 모듈의 코드를 다른 파일에 로깅 할 수있는 기능을 제공하며, 이상한 상황에 상관없이 의존 할 수 있습니다 (공간이 부족한 경우 로거가 수행 할 작업은 무엇입니까? ?)

2

다른 설명은 생략했습니다. 원하는 라이브러리가 이미있는 경우 코드을 작성하지 않아도됩니다.

은 아마도 여기에 의미를 연주 : 나에게는 "로깅 프레임 워크는"일반적으로 파일에 로그 메시지를 기록하는 클래스 ... 그래서 당신이 무슨 짓을했는지 자신의 기록을 쓰기보다는 조금 더있다 뼈대. 당신이 그렇게했다면, 분명히 일부는 "로깅 프레임 워크 사용"을 지적합니다!

결국 궁극적으로 동시 로깅을 올바르게 처리 (출력 스트림 잠그기)하고, 파일, syslog 등에 로그 할 수 있는지, 로그 롤링을 할 수 있는지 등을 확인해야합니다. 다른 사람의 잘 테스트 된 코드를 사용하여 이러한 노력을 절약 할 수 있습니다.

1

로깅 프레임 워크는 유연성을 제공하고 사용자가 바퀴를 다시 만들 수 없도록합니다. 나는 현대적인 언어로 파일을 추가하는 것이 뇌사로 간단하다는 것을 알고 있지만 집에서 재배 한 로거는 여러 목표를 가지고 있습니까? 런타임에 로그온을 설정하거나 해제 할 수 있습니까? 휠이 무료로 제공되는 이유는 무엇입니까?

+0

"두뇌가 죽어서 파일에 간단하게 추가됩니다"- 특히 다중 스레드와 특히 스레드가 실제로 동시에 실행되는 멀티 코어 대? 마이크로 소프트의 ETW는 프로세서 당 버퍼링 기능을 제공하며, 이상적인 솔루션이라고 생각합니다. – pngaz

관련 문제