C#,ASP.NET 윈도우 이벤트 로그(Event Log) 다루기
C#,ASP.NET 윈도우 이벤트 로그(Event Log) 다루기
EventLog 구성 요소를사용하면 로컬 컴퓨터와 원격 컴퓨터 모두에서 쉽게 Windows 이벤트 로그에 연결하고 이 로그에 엔트리를쓸 수 있고 기존 로그에서 엔트리를 읽고 사용자 지정 이벤트 로그를 만들 수도 있습니다. 이벤트는 Windows에 정의되어 있는 것처럼 사용자에게 알려야 하는 운영 체제나 응용 프로그램에서 발생하는 모든 중요한사건을 의미하며 중대한 이벤트는 화면에 즉시 메시지를 표시하는 방식으로 사용자에게 전달됩니다. 기타이벤트는 나중에 참조할 수 있도록 여러 이벤트 로그 중의 하나에 기록되고 모든 이벤트 로그 엔트리는 오류, 경고, 정보, 성공 감사또는 실패 감사로 분류됩니다.
다음 세 가지 이벤트 로그는 Windows 또는 Windows NT를 실행하는 컴퓨터에서 기본적으로사용할 수 있습니다.
- 시스템 로그: 시스템 구성 요소에서 발생하는 이벤트를 추적합니다(예: 드라이버 문제).
- 보안 로그: 보안 변경 내용 및 침해 가능성을 추적합니다.
- 응용 프로그램 로그: 등록된 응용 프로그램에서 발생하는 이벤트를 추적합니다.
System.Diagnostics 네임스페이스의언어 기능을 사용하여 사용자 지정 로그를 만들 수도 있습니다.
EventLog 구성 요소 인스턴스구성과 관련된 세 가지 주요 속성이 있습니다.
- Log 속성은 상호 작용할 로그표시
- MachineName 속성은 사용 중인 로그가 있는 컴퓨터를 나타내며
- Source 속성은 구성 요소가 로그에 엔트리를 쓸 때 구성 요소 식별에 사용할 소스 문자열을 나타냅니다.
EventLog 구성 요소를구성하는 방법은 해당 구성 요소를 사용하는 방법에 따라 다릅니다.
- 로그에 엔트리를 쓸 경우 다음 두 가지 방법 중 하나를 수행합니다. EventLog.CreateEventSource 메서드를 사용하여 소스를 등록하고 EventLog 구성 요소의 Source 속성을 동일한 소스로 설정하거나 해당 구성 요소에 대한 MachineName, Log 및 Source 속성을 설정합니다.
- 로그 엔트리를 읽거나 로그를 모니터링 하려면 감시할 로그를 가리키도록 MachineName 및 Log 속성을 설정합니다. 이 경우에는 Source 속성을 설정할 필요가 없습니다.
다음 예제는 응용 프로그램 로그에 엔트리를쓸 수 있도록 구성 요소를 구성하는 방법을 보여 주는데 소스가 아직 로그에 등록되어 있지 않으므로 소스 문자열,로그, 컴퓨터 이름 등을 지정해야 합니다. 소스가아직 등록되어 있지 않은 경우 EventLog.WriteEntry를 호출하면 소스를 로그에 등록하기때문에 CreateEventSource 메서드를명시적으로 호출할 필요가 없습니다.
System.Diagnostics.EventLogEventLog1 = new
System.Diagnostics.EventLog("Application","myserver", "newsource");
EventLog1.WriteEntry("Test");
소스가 이미 등록되어 있으면 단순히 Source 속성을 설정하고 엔트리를 쓰기만 하면 됩니다. 예를 들어, 다음 코드는 이미 등록되어 있는 소스를 사용하여 로그에엔트리를 쓰는 방법을 보여 줍니다.
// C#
if(!System.Diagnostics.EventLog.SourceExists("ExistingSourceString"))
System.Diagnostics.EventLog.CreateEventSource(“ExistingSourceString","Application");
System.Diagnostics.EventLogEventLog1 =
new System.Diagnostics.EventLog();
EventLog1.Source ="ExistingSourceString";
EventLog1.WriteEntry("TestEntry2");
--------------------------
[이벤트 로그 기록 예제 1 ]
--------------------------
<%@ PageLanguage="c#" AutoEventWireup="true" %>
<%@ Importnamespace="System.Diagnostics" %>
<!DOCTYPE HTMLPUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<script language="C#"runat="server">
void WriteEvent_Click(Object Src,EventArgs e)
{
EventLog ev = new EventLog("Application");
// Event's Source name
ev.Source = "TEST";
//EventLog.CreateEventSource(ev.Source,"Application");
try
{
ev.WriteEntry(TextBox1.Text);
}
catch (Exception b)
{
Response.Write("WriteEntry" + b.Message + "<br>");
}
ev= null;
}
</script>
<body>
<form id="Form1"runat="server">
Event message:
<asp:textboxid="TextBox1" runat="server"Width="233px"></asp:textbox>
<asp:buttonid="Button1" onclick="WriteEvent_Click"runat="server" NAME="Button1" text="Write to eventlog"></asp:button>
</form>
</body>
</HTML>
[실행 결과]
[이벤트 로그 확인 결과]