2014-08-29 3 views
0

SO의 이벤트 뷰어 작성에 대한 많은 주제가 있지만 필요한 항목을 찾지 못했습니다.계층 구조가있는 이벤트 로그에 쓰기

나는 이벤트 뷰어에서 새로운 이벤트 로그 범주를 만들려면 다음 코드를 :

string sSource = "MyWebService"; 
string sLog = "My Application"; 
string sMsg = "Error Message Goes here"; 

if (!EventLog.SourceExists(sSource)) 
{ EventLog.CreateEventSource(sSource, sLog); } 

이 예상대로 작동하고 이벤트 뷰어에, 나는 다음과 같은 출력이 있습니다

enter image description here

따라서 이벤트 뷰어에 쓰는 것은 문제가되지 않지만 로그에 일부 계층을 만들려고 할 때 이 발생하면 문제가 발생합니다.

그래서, 나는 다양한 구성 요소에서 구성 응용 프로그램 작성했다고 가정하자 :

- MVC 
- Web API 
- Windows Service 

을 다음 이벤트 뷰어를, 나는 Microft가하는 것처럼 모든 요소를 ​​포함하는 사전을 만들려면 이 의미

enter image description here

나는 보이는 출력을하고 싶습니다 같은 :

- Application (directory) 
    - MVC (directory) 
     - Others (logs) 
    - Web API (directory) 
     - Demo (logs) 
    - Windows Service (directory) 
     - Authentication (logs) 
,

나는 다음을 수행하려고했습니다 :

string sSource = "MyWebService"; 
string sLog = "My Application"; 
string sMsg = "Error Message Goes here"; 

if (!EventLog.SourceExists(sSource)) 
{ EventLog.CreateEventSource(sSource, sLog); } 

if (!EventLog.SourceExists(sLog)) 
{ EventLog.CreateEventSource(sLog, "Web Service"); } 

그러나 물론

, 이것은 작동하지 않았다.

누구나 이벤트 뷰어에서 계층 구조를 만드는 방법을 알고 있습니까?

중요 사항 : 내 코드를 완전히 제어 할 수 있기 때문에 제 3 자 라이브러리를 사용하지 않아도됩니다.

답변

0

ETW (Windows 용 이벤트 추적)를 사용하려면 원하는 것을 수행하십시오. .NET에서는 EventSource 클래스를 사용할 수 있지만 더 최신 NuGet 패키지 (Microsoft EventSource Library)를 사용하는 것이 좋습니다. 또한 ETW를 처음 사용하는 경우 좋은 시작점을 제공하는 샘플이 포함 된 NuGet 패키지가 있습니다.

이벤트 로그에 기록하는 코드를 만드는 것 외에도 매니페스트와 관련 리소스 DLL을 만들어야합니다. NuGet 패키지에는 코드에서 작성한 로그 이벤트를 기반으로이 프로세스를 자동화하는 도구가 있습니다. 그런 다음 wevtutil 명령 줄 도구를 사용하여 이벤트 소스를 등록해야합니다.

+0

답장을 보내 주셔서 감사합니다.하지만 제 질문으로는 코드 사용을 통제하고 싶습니다. 패키지 사용을 피하고 싶습니다. 나중에 패키지를 사용할 수는 있지만 먼저 작동 방식을 알고 싶습니다. :-) – Complexity

+0

@Complexity : 그렇다면 P/Invoke를 사용하여 원시 ETW API를 호출하는 것이 좋습니다. 나는'EventSource' 코드를 들여다 보았고 꽤 복잡합니다. 원하는 것을하기 위해서도 ETW를 사용해야합니다. 여기에 API 문서 링크가 있습니다 : http://msdn.microsoft.com/en-us/library/windows/desktop/bb968803(v=vs.85). aspx –

+0

흠, P/Invoke를하고 싶지 않아서, 너겟 패키지로 갈 수도 있습니다. – Complexity