반응형
이벤트 뷰어에 C # 쓰기
내 C # 코드에서 이벤트 뷰어에 쓰려고하는데 멋진 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다"라는 메시지가 나타납니다. 이 코드에 문제가 있거나 더 나은 방법으로 도움을 주시면 감사하겠습니다. 다음은 이벤트 로그에 기록하기위한 것입니다.
private void WriteToEventLog(string message)
{
string cs = "QualityDocHandler";
EventLog elog = new EventLog();
if (!EventLog.SourceExists(cs))
{
EventLog.CreateEventSource(cs, cs);
}
elog.Source = cs;
elog.EnableRaisingEvents = true;
elog.WriteEntry(message);
}
그리고 여기 내가 그것을 부르려고하는 곳이 있습니다 :
private readonly Random _rng = new Random();
private const string _chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private string RandomString(int size)
{
try
{
char[] buffer = new char[size];
for (int i = 0; i < size; i++)
{
buffer[i] = _chars[_rng.Next(_chars.Length)];
}
return new string(buffer);
}
catch (Exception e)
{
WriteToEventLog(e.ToString());
return null;
}
}
문제는 아마도 존재하지 않는 로그에 이벤트 소스를 만들려고한다는 것입니다. "응용 프로그램"로그를 지정해야합니다.
다음으로 변경해보십시오.
if (!EventLog.SourceExists(cs))
EventLog.CreateEventSource(cs, "Application");
EventLog.WriteEntry(cs, message, EventLogEntryType.Error);
또한 : Sharepoint 내에서 앱이 로그인 한 사용자 (Windows 인증 또는 위임을 통해)로 실행중인 경우 사용자는 이벤트 소스를 생성 할 수있는 액세스 권한이 없습니다. 이 경우 한 가지 트릭은 ThreadPool 스레드를 사용하여 이벤트를 생성하는 것입니다.이 스레드는 생성 될 때 앱 풀이 실행되는 사용자의 보안 컨텍스트를 갖게됩니다.
이벤트 로깅을 구현 한 방법은 다음과 같습니다. 다른 로깅 메커니즘으로 교체 할 수 있도록 일반적인 ILogger 인터페이스를 만들었습니다.
interface ILogger
{
void Debug(string text);
void Warn(string text);
void Error(string text);
void Error(string text, Exception ex);
}
내 구현 클래스는 매우 간단합니다.
class EventLogger : ILogger
{
public void Debug(string text)
{
EventLog.WriteEntry("MyAppName", text, EventLogEntryType.Information);
}
public void Warn(string text)
{
EventLog.WriteEntry("MyAppName", text, EventLogEntryType.Warning);
}
public void Error(string text)
{
EventLog.WriteEntry("MyAppName", text, EventLogEntryType.Error);
}
public void Error(string text, Exception ex)
{
Error(text);
Error(ex.StackTrace);
}
}
EventLog를 인스턴스화하지 않습니다. 내 로거 클래스를 사용하기 위해 다음 참조가 있습니다 (정적 팩토리 메서드에서 반환 할 수 있음).
private static readonly ILogger log = new EventLogger();
그리고 실제 사용법은 다음과 같습니다.
try
{
// business logic
}
catch (Exception ex)
{
log.Error("Exception in MyMethodName()", ex);
}
private void WriteEventLogToFile()
{
try
{
using (EventLog eventLog = new EventLog("Application"))
{
// source for your event
eventLog.Source = "IAStorDataMgrSvc";
// Syntax details
// eventLog.WriteEntry("details",type of event,event id);
eventLog.WriteEntry("Hard disk Failure details", EventLogEntryType.Information, 11);
}
}
catch (Exception)
{
throw;
}
}
참조 URL : https://stackoverflow.com/questions/1133355/c-sharp-writing-to-the-event-viewer
반응형
'UFO ET IT' 카테고리의 다른 글
jQuery Dialog 및 Datepicker 플러그인 문제 (0) | 2021.01.11 |
---|---|
jQuery 선택기 값 이스케이프 (0) | 2021.01.11 |
Enum에서 숫자 값을 얻는 방법은 무엇입니까? (0) | 2021.01.11 |
Eclipse에서 블록 선택 (0) | 2021.01.11 |
jQuery를 사용하여 IE에서 선택 옵션 숨기기 (0) | 2021.01.11 |