2013-07-01 3 views
1

내 응용 프로그램에서는 EventLog를 사용합니다. 왜냐하면 나는 돈을 가지고 일하기 때문에 발생할 수있는 모든 이벤트를 로깅해야하기 때문입니다. EventLog는 훌륭하게 작동하지만 문제는 내 메시지가 너무 빨리 전달된다는 것입니다 (1 초 안에 약 3-5 개의 이벤트가 있음).
나는 그 메시지를 적절하게 EventLog에서 정렬 할 수 없다. (나는 시간별로 정렬해야한다.) 문제는 1s에서 5events가 발생하면 해당 이벤트가 EventLog에서 "무작위로"정렬되므로 YYYY/MM/DDhh/mm/ss를 통해서만 로깅됩니다.하지만 miliseconds를 추가해야합니다. 어떻게 달성 할 수 있습니까? 내가 이벤트를 기록하고 방법Windows EventLog, miliseconds 정밀도를 가진 로그를 작성하십시오.

내 기본 코드 :

if (!EventLog.SourceExists(EventLogName)) 
     EventLog.CreateEventSource(ex.Message, EventLogName); 
    EventLog log = new EventLog(); 
    log.Source = EventLogName; 
    log.WriteEntry(ex.Message, EventLogEntryType.Error); 

WriteEntry에서 가장 정확한 부가 요소는 다음과 같습니다 -String
소스
-String 메시지
-EventLogEntryType 유형
-int의 이벤트 ID
-sort category
-byte [] rawData

하지만 저장된 시간은 어디에도 없습니다. miliseconds 정밀도로 기본 Windows EventLog를 작성하는 방법이 있습니까?

답변

1

타사 라이브러리를 사용할 수없는 이유는 무엇입니까? 제한이 있다고 가정 할 때 '비 Microsoft'라이브러리의 사용을 금지 한 사람과이를 논의했습니다. 그런 담요 제한은 어리 석다.

다른 타임 스탬프는 가져올 수 없지만 몇 가지 해킹을 시도 할 수 있습니다. 분명한 것은 millisecond 정밀도 부분 (로그에 기록되지 않음)을 취하여이를 EventID으로 사용하는 것입니다. 이는 응용 프로그램마다 다르므로 원하는대로 사용할 수 있습니다. 초당 이벤트가 적은 경우 이벤트 로그 날짜/시간을 정렬해도 괜찮 으면 이벤트 순서를 시각적으로 설정할 수 있습니다.

너무 많으면 이벤트 로그를 Excel 등으로 내보내고 두 열을 기준으로 정렬 할 수 있습니다.

분명히 소스를 필터링하여 왕겨를 줄일 수 있습니다.

Windows high speed logging: ETW in C#/.NET using System.Diagnostics.Tracing.EventSource도 참조하십시오. 도움이 될 수 있지만 EventLog에만 로그온하려는 경우는 아닙니다.

기본적으로 요구 사항이 밀리 초 정밀도이면 Windows 이벤트 로그를 사용하지 않아야합니다. 지적했듯이 필요한 것을 제공하는 많은 로깅 솔루션이 있습니다.

0

이벤트 로그가 타임 스탬프를 기록하고 있으므로 밀리 초 정밀도를 얻을 수없는 것처럼 보입니다.

log4net과 같은 것을 사용하여 표준 텍스트 기반 로그에 쓰는 것이 더 좋지 않습니까? log4net이 작성한 로그에는 밀리 초 정밀도뿐만 아니라 항목을 쓰는 클래스의 신원과 같은 많은 것들이 있습니다. 규모를 늘릴 필요가있는 경우에는 훨씬 더 빠를 가능성이 있습니다.

+0

대단히 감사합니다. 그러나 제 3 자 소프트웨어에 로그인 할 수 없습니다. .. log4net은 나를 위해 최선이 아닙니다. (..하지만 감사합니다. 내가보기에, EventLog에서 ms로 작성하는 것이 가능하지 않습니다. 2 일을 기다릴 것이고, 아무도 대답을하지 않으면, 나는 대답처럼 그것을 표시 할 것이다 .x .. – piggy