log4net 대 Nlog


355

누구나 둘 다 경험이 있습니까? 그들은 서로 어떻게 쌓입니까?

엔터프라이즈 애플리케이션에 로그인하기 위해 그 중 하나를 사용할 계획입니다.

참고 문헌 :

log4net

nlog

편집 : 우리는 nlog 또는 log4net에 대한 기존 종속성이 없습니다.


9
이것은 내가 사용하는 로거입니다. System.IO.File.AppendAllText (@ "c : \ log.txt", string.Format ( "{0} \ r \ n", message));
zumalifeguard

213
당신에게는 좋지만, 어떤 사람들은 동적으로 로그를 켜고 끄는 기능, 다른 로그 레벨을 사용하거나 오래된 로그 데이터 등을 자동으로 삭제하는 기능이 필요할 수 있습니다.
Tor Hovland

23
Log4Net 설명서는 끔찍합니다.
BentOnCoding


2
ReflectInsight를 사용해보십시오. 훨씬 더 강력한 다음 두 insightextensions.codeplex.com
CODE5

답변:


383

나는 최근에 다가올 프로젝트를 위해 "일부 loggin 프로토 타입을 만드는"임무를 맡았다. 로깅 프레임 워크 경험이 없었습니다. 나는 며칠 동안 Log4Net, NLog 및 Enterprise Library에서 튜토리얼을 조사하고 장난감 앱 등을 만들었습니다. 3-4 주 후에 돌아와서 응집력있는 데모로 만들었습니다. 바라건대이 중 일부는 당신에게 유용합니다.

우리 프로젝트에 대한 나의 추천은 다음과 같습니다.

  1. 직접적인 종속성을 피하려면 로깅 파사드 (예 : Common.Logging , SimpleLoggingFacade )를 사용하십시오 .
  2. 다른 시설에 Enterprise Library를 사용하면 로깅에도 사용됩니다.
  3. Log4Net에 의존하는 것을 사용하면 Log4Net을 사용하십시오.
  4. 위의 어느 것도 없으면 NLog를 사용하십시오. 내가 선호하는 것.

그것은 다음과 같은 결과를 바탕으로합니다 (의견!) :

  • 3 가지 프레임 워크가 모두 가능하며 정교한 작업을 수행 할 수 있습니다. 우리는 양질의 솔루션을 원하지만 솔직히 초 고성능 또는 60 가지 유형의 이벤트 싱크가 필요하지 않습니다.
  • 3 가지 모두 매우 유사한 기본 개념을 가지고 있습니다.
  • 각각에는 실제로 고급 라우팅 또는 동적 로그 파일 이름, 파일 잘림 등과 같은 멋진 트릭이 있습니다.
  • 3 가지 모두 자신의 방식으로 잘 문서화되어 있습니다.
  • 나와 같은 완전한 새로운 것을 위해, 그들은 처음에 모두 조금 어색했습니다. 기본 사항에는 큰 차이가 없습니다. 나는 그것을 극복했다.
  • 몇 주 후 물건을 다시 방문 할 때, NLog이었다 명확하게 다시 시작하는 가장 쉬운 방법. 나는 그것에 약간의 브러시가 필요했습니다. Log4Net을 사용하여 몇 가지 온라인 예제를 다시 방문해야했습니다. EntLib을 사용하여 튜토리얼을 포기하고 처음부터 다시 시작했습니다.
  • EntLib가 데이터베이스에 로그와 같은 작업을 수행하는 방법을 알 수 없었습니다. 쉽지만 시간 제한을 벗어났습니다.
  • Log4Net 및 NLog는 코드 내 공간이 작습니다. EntLib는 스팸이지만 어쨌든 정면을 사용합니다.
  • 실수로 EntLib를 잘못 구성했으며 런타임에 알려주었습니다. Log4Net은 그렇지 않았습니다. NLog에서 실수로 잘못 구성하지 않았습니다.
  • EntLib에는 멋진 app.config 편집기가 포함되어 있으며 100 % 필요합니다. NLog에는 설정 파일 스키마가 있으므로 "지능형"을 얻을 수 있습니다. Log4Net은 nada와 함께 제공됩니다.

분명히 지금까지 NLog를 좋아합니다. 그러나 다른 솔루션을 사용할 수 있지만 사용하기에는 충분하지 않습니다.


19
진정한 SoC (Separation of Concerns)를위한 Facade 구축 권장 +1 또는 도메인을 오염시키지 않습니다.
eduncan911

66
외관은 호출 스택 등에 의존하는 진단 값을 손상시키지 않고 수행 할 수있는 경우에만 작동합니다. 필자는 이러한 필수 진단 기능을 손상시켜 그 결과에 더 해를 끼치는 많은 외관을 보았습니다 ...
James Schek

11
Log4Net은 System.Web을 참조하므로 .NET 3.5 SP1 및 .NET 4의 클라이언트 프로파일을 아직 지원하지 않습니다. 실제로는 'Log4Net에 의존하고 Log4Net을 사용하십시오'와 밀접한 관련이 있지만 지적하고 싶었습니다.
Simon D.

59
NLog는 적극적으로 지원 되며 ( nlog-project.org/download ) 2006 년 4 월 19 일에 발행 된 버전 1.2.10 이후로 logs4Net 이 업데이트되지 않았지만 ( issues.apache.org/jira/browse/LOG4NET/fixforversion/11128 )
Jay Cincotta

5
log4net을 사용하여 라이브러리에 종속되어 있고 대신 NLog를 사용하려는 경우 (또는 그 반대), 사용자 정의 Appender 클래스를 작성하고 구성하여 둘을 연결하는 것이 매우 간단합니다.
dbkk

158

많이 논의되지 않은 주요 고려 사항은 지원 및 업데이트입니다.

1.2.10 버전이 2006 년 4 월 19 일에 게시 된 이후 Log4Net이 업데이트되지 않았습니다 .

반면 NLog는 2006 년부터 적극적으로 지원되어 log4net이 마지막으로 업데이트 될 때 존재하지 않았던 많은 플랫폼을 지원하는 NLog 2.0 을 곧 출시 할 예정입니다 .

  • NET Framework 2.0 SP1 이상, 3.5 및 4.0 (클라이언트 및 확장 프로파일)
  • Silverlight 2.0, 3.0, 4.0
  • .NET Compact Framework 2.0, 3.5
  • 모노 2.x 프로파일

30
그러나 업데이트가 필요합니까? 고장 나지 않았다면 고치지 않습니까?
glenneroo

24
됩니다 깨진 : Vista 및 Win7에에 로컬 호스트의 IPv4 / IPv6의 사이 * 쓸데없이 참견 최대의 IP 주소 확인은 (여러 비공식 패치가 주위에 떠 있습니다) * 닷넷 4.0 클라이언트 프로파일에 컴파일되지 않습니다
Tormod Hystad을

6
Log4Net의 작품에는 .NET 4.0 버전이있는 것으로 보입니다.
scope_creep

38
log4net은 2011 년 10 월 v1.2.11을 시작했습니다 . 나는이 대답이 이제 더 이상 사용되지 않는다고 생각합니다.
Mariano Desanze

83
실제로이 답변은 여전히 ​​나에게 귀중했습니다. 나는 로거를 선택하는 과정에 있으며,이 답변에 따르면 log4net은 지난 반 십 년 동안 한 번 업데이트되었지만 NLog는보다 활발한 프로젝트입니다.
Batibix

97

최근에 두 프레임 워크 모두에 대한 경험이 있었기 때문에 각 프레임 워크에 대한 견해를 공유 할 수 있다고 생각했습니다.

기존 웹 응용 프로그램의 로깅 프레임 워크를 평가하라는 요청을 받았으며 다양한 온라인 포럼을 거친 후 NLog (v2.0) 및 log4net (v1.2.11)으로 선택 범위를 좁혔습니다. 내 결과는 다음과 같습니다.

  1. NLog로 설정 / 시작하는 것은 매우 쉽습니다. 웹 사이트에서 시작하기 자습서를 진행하면 끝납니다. 당신은 공정한 아이디어를 얻습니다. 구성 파일은 매우 직관적이므로 누구나 구성을 이해할 수 있습니다. 예를 들어, 내부 로그온을 설정하려면 Nlog 구성 파일의 헤더 노드에서 플래그를 설정합니다. log4net에서는 web.config의 appSettings 섹션에서 다른 플래그를 설정합니다.

  2. log4net에서 내부 로깅은 타임 스탬프를 출력하지 않아 성가시다. Nlog에서는 타임 스탬프가 포함 된 멋진 로그를 얻습니다. 평가에 매우 유용하다는 것을 알았습니다.

  3. log4net의 필터- 이 질문을 더 잘 확인하십시오 -log4net 필터-로그 메시지를 무시하기 위해 작성하고 필터링하는 방법에 대한 답변 / 해결책을 찾으면 알려주십시오. 사용자 정의 필터를 작성할 수 있으므로이 질문에 대한 해결 방법이 있습니다. 그러나 log4net에서 쉽게 사용할 수없는 것.

  4. 성능-저장 프로 시저를 사용하여 약 3000 개의 로그 메시지를 데이터베이스에 기록했습니다. 동일한 메시지를 3000 번 기록하기 위해 간단한 for 루프 (int i = 0; i <3000; i ++ ...)를 사용했습니다. 기록의 경우 : log4net AdoAppender는 NLog보다 거의 두 배의 시간이 걸렸습니다.

  5. Log4net은 비동기 어 펜더를 지원하지 않습니다.

로깅 프레임 워크로 NLog를 선택하는 것이 충분했습니다. :)



36

이 스레드에 늦게 도달 한 사용자는 .Net Base Class Library (BCL)를 다시 살펴볼 수 있습니다. TraceSource 클래스 (2005 년경)가 소개 되었을 때 많은 사람들이 .Net 1.1과 .Net 2.0 사이의 변화를 놓쳤습니다 .

TraceSource를 사용하면 엔터프라이즈 응용 프로그램 블록의 오버 헤드없이 로깅, 세분화 된 제어, app.config / web.config의 구성 및 프로그래밍 방식 액세스를 통해 다른 로깅 프레임 워크와 유사합니다.

"log4net vs TraceSource"와 같은 여러 비교가 있습니다.


1
EntLib는 TraceSource을 확장하고
마이클 Freidgeim

34

우리에게 중요한 차이점은 전반적인 성능에 있습니다.

보세요 Logger.IsDebugEnabled테스트에서 NLog와 Log4Net을 NLog는 오버 헤드가 적고 우리가 따르는 것입니다 (대기 시간이 짧음).

건배, 플로리안


25

먼저 스택의 나머지 부분을보십시오.

NHibernate를 사용하는 경우 Log4Net을 직접 사용합니다. 다른 프레임 워크에는 필요한 다른 특정 로거가있을 수 있습니다.

그 외에는 둘 다 잘 작동합니다.

나는 Log4Net에 스스로 정착했다. 구성하기가 어려울 수 있으며 올바르게 구성되지 않으면 무엇이 잘못되었는지 파악하기가 어렵습니다. 그러나 로거에서 원하는 거의 모든 것을 할 수 있습니다.

Log4Net에 대한 문제가없는 경우 여기에 시작하는 방법에 대해 쓴 기사가 있습니다. http://elegantcode.com/2007/12/07/getting-started-with-log4net/


9
@greg : NHibernate v3에서는 log4net에 대한 의존성이 고맙게 제거되었습니다. 플러그 인 가능하므로 NLog를 원할 경우 사용할 수 있습니다.
UpTheCreek

NLog는 무엇이 잘못되었는지를 구성하고 파악하는 데 어려움을 겪습니다. 적어도 log4net을 사용하면 문서 및 / 또는 Google 문제를 찾을 수 있습니다.
Mr.

스택의 나머지 부분을 고려할 때 좋은 지적은, 이것이 내 머리 꼭대기에서 고려했을 우려 사항이라고 말할 수는 없습니다. NHibernate가 더 이상이 시나리오의 예가 아닌 것처럼 보이지만 Sitecore는 내부적으로 Log4Net을 사용하기 때문에 이에 대한 현대적인 예를 제공합니다. Sitecore는 상당히 확장 가능하므로 원하는 로그를 사용하여 기록 할 수 있지만 사이트의 web.config를 편집하여 자신의 로거를 추가하는 것보다 훨씬 복잡합니다.
Scott Simontis


14

위의 내용을 에코하고 nLog를 선호합니다. Entlib는 불필요하게 부풀어 오른다.

Re : Log4net 항상 log4net으로 얻는 한 가지는 global.asax에 다음을 추가하여 구성 요소를 초기화하는 것을 잊어 버리는 것입니다.

log4net.Config.XmlConfigurator.Configure();

13

여기 가면 NLog 및 Log4Net 라이브러리뿐만 아니라 Enterprise Lib 및 기타 제품을 포함하는 포괄적 인 매트릭스를 찾을 수 있습니다.

누군가는 매트릭스에 존재하는 유일한 상용 라이브러리의 특징을 강조하는 방식으로 매트릭스가 완료되었다고 주장 할 수 있습니다. 나는 그것이 사실이라고 생각하지만 어쨌든 내 선택과 NLog를 주도하는 것이 유용했습니다.

문안 인사


1
이 매트릭스를 살펴보면 적어도 상업적 경쟁자 인 The Object Guy의 프레임 워크와 관련하여 상당히 오래된 것 같습니다.
Andy Dent

9

알다시피, log4net은 응용 프로그램이 실행되는 동안 출력 파일을 잠그므로 삭제할 수 없습니다. 그렇지 않으면 비슷합니다.

따라서 NLog를 선호합니다.


22
추가 <lockingModel 유형 = "log4net.Appender.FileAppender + MinimalLock"/>이 문제를 방지하기 위해 fileappender의 설정에 (여기 log4net 예제 페이지에서 언급 한 : logging.apache.org/log4net/release/config-examples.html )
EventHorizon

9

내가 운영하는 오픈 소스 프로젝트에 대한 뻔뻔한 플러그이지만 .NET 로깅 프레임 워크가 더 활발한 것에 대한 활발한 토론을 감안할Serilog에 대한 의무적 인 링크를 게시 할 것이라고 생각 했습니다 .

응용 프로그램 내에서 사용하기 위해 Serilog는 log4net과 비슷합니다 (그리고 크게 그립니다). 그러나 다른 .NET 로깅 옵션과 달리 Serilog는 오프라인 분석을 위해 로그 이벤트 구조를 보존하는 것입니다. 당신이 쓸 때 :

Log.Information("The answer is {Answer}", 42);

대부분의 로깅 라이브러리는 즉시 메시지를 문자열로 렌더링합니다. Serilog도이를 수행 할 수 있지만 { Answer: 42 }나중에 여러 NoSQL 데이터 저장소 중 하나를 사용하여 값을 기반으로 이벤트를 올바르게 쿼리 할 수 ​​있도록 특성을 보존합니다.Answer .

우리는 1.0에 가까우며 모든 최신 (.NET 4.5, Windows Store 및 Windows Phone 8) 플랫폼을 지원합니다.


그러나 문제는 모노를 지원합니까? ;) 유망 해 보이고 (나사와 바늘 로고가 마음에 들지만) Mono를 지원하는지 여부에 대한 정보를 찾을 수 없습니다.
ashokgelal

좋은 질문 :) ... 네, 모노 사용자가 있습니다. Serilog의 .NET 4.5 또는 4.0 빌드를 사용하고 있는지 확실하지 않지만 문제가 발생하면 도움이 될 것입니다.
Nicholas Blumhardt

.NET 4.5 지원으로 솔루션 다운로드 및
Fat Shogun

8

관리되지 않는 코드로도 작동하기 때문에 NLog도 두 번째입니다. log4net과 log4cxx를 함께 사용하는 것이 가능할 수도 있지만 NLog는 관리 코드와 관리되지 않는 코드를 모두 즉시 처리합니다.

또한 로깅 API의 추상화를 만드는 파사드 인 Common.Logging 도 살펴 봤으며 log4net, NLog 및 Entreprise Library를 지원합니다. 나는 그것을 사용할 것이라고 생각하지 않지만 로깅이 비활성화 될 때 (NLog 및 아마도 다른 사람들과 공유되는 기능) 람다를 사용하여 성능을 향상시키는 방법을 좋아합니다.


4

Microsoft Enterprise Library 로깅 블록을 고려할 수도 있습니다 . 멋진 디자이너와 함께 제공됩니다.


3
XML을 직접 제작하는 대신 시각적으로 구성 할 수 있습니다. 취향에 따라 ...
Rashack

13
그러한 것에 시각적 도구를 사용한다는 아이디어는 좋지 않습니다.
Adam Dymitruk

4
아마도 좋지는 않지만 EntLib 비주얼 컨 피규 레이터가 필요합니다. 구성을 수동으로 작성하는 것은 실제로 불가능하며 너무 복잡합니다 (알다시피 Microsoft의 것임).
Pavel Hodek

1
누군가 비주얼 디자이너를 좋아하지 않더라도 왜 공감해야합니까! : o
nawfal

EntLib는 동 기적으로 로깅을 수행하므로 본질적으로 성능을 저하시킬 수 있습니다.
Michael Freidgeim

2

일반적인 의견은 nlog가 구성 및 사용이 조금 더 쉽다는 것입니다. 하지만 둘 다 아주 능숙합니다.


0

내 경험에 따르면 SmartInspect 는 NLog와 log4net을 모두 능가합니다.

사용이 매우 쉽고 문서가 훌륭하며 이전에 기록 된 메시지를보고 필터링 할 수 있습니다. 하며 대화 형 로그 뷰어를 사용하여 를 .

내가 좋아하는 것 중 하나는 Chrome의 브라우저 탭과 같은 데이터 탭보기입니다. 각 탭은 서로 다른 필터링 된 로그보기를 제공 할 수 있습니다.


11
유료 제품입니다. NLog 및 Log4Net은 무료입니다.
Zo는
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.