Windows 로그에 기록을 남기고자 할 경우, source 와 log 를 만들면 됩니다.
여기서 이미 만들어져 있는 응용 프로그램은 log 명이 "Application" 입니다. 그리고 목록에 원본은 source 를 의미합니다.
EventLog.WriteEntry 메서드에서 사용할 수 있는 메시지 문자열의 길이는 약 32766자입니다. 이는 Windows 이벤트 로그가 단일 이벤트에 대해 처리할 수 있는 최대 문자 수에 기반한 값입니다. 그러나 실제로는 이보다 작은 값이 될 수 있습니다. 왜냐하면 이벤트 로그 메시지는 메시지에 포함된 다른 정보들 (예: 이벤트 소스, 이벤트 ID 등)과 함께 전체 이벤트 로그 항목을 구성하며, 전체 이벤트 로그 항목의 크기는 32768바이트를 넘을 수 없기 때문입니다. 따라서 메시지 문자열이 너무 길면, EventLog.WriteEntry 메서드는 ArgumentException을 발생시킬 수 있습니다. 이를 방지하기 위해, 메시지 문자열의 길이를 적절히 제한하는 것이 좋습니다.
using System.Diagnostics;
public class EventLogger
{
private const int MaxMessageLength = 32766;
private string source;
private string log;
public EventLogger(string source, string log)
{
this.source = source;
this.log = log;
if (!EventLog.SourceExists(source))
{
// Note: administrator 권한 필요
EventLog.CreateEventSource(source, log);
}
}
public void LogInfo(string message)
{
WriteEntry(TrimMessage(message), EventLogEntryType.Information);
}
public void LogWarning(string message)
{
WriteEntry(TrimMessage(message), EventLogEntryType.Warning);
}
public void LogError(string message)
{
WriteEntry(TrimMessage(message), EventLogEntryType.Error);
}
private void WriteEntry(string message, EventLogEntryType type)
{
using (EventLog eventLog = new EventLog(log, ".", source))
{
eventLog.WriteEntry(message, type);
}
}
private string TrimMessage(string message)
{
if (message.Length > MaxMessageLength)
{
message = message.Substring(0, MaxMessageLength);
}
return message;
}
}
using (EventLog eventLog = new EventLog(log, ".", source))
위의 코드를 보면 2번째 "." 은 EventLog 클래스의 인스턴스를 생성할 때 "."을 사용하여 로컬 컴퓨터를 가리키고 있습니다. 이는 이벤트 로그가 기록되는 machine 를 나타냅니다. 원격 컴퓨터에 이벤트 로그를 기록하려면, 이 부분을 원격 컴퓨터의 이름이나 IP 주소로 변경하면 됩니다.
public EventLog (string logName, string machineName, string source);
이제 이벤트 구현한 코드를 기반으로 사용하는 방법은 아래와 같습니다.
EventLogger logger = new EventLogger("나의 리포트", "Application");
logger.LogInfo("This is an information message.");
logger.LogWarning("This is a warning message.");
logger.LogError("This is an error message.");