재우니의 블로그

 

 

 

 

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.");

 

이렇게 하면, 각각의 메시지가 이벤트 뷰어에 정보, 경고, 오류 로그로 기록됩니다.

 

 

EventLogEntryType 열거형은 다음의 5가지 값을 가지고 있습니다.

 

  1. Error: 심각한 문제로 인해 프로그램이 중단될 수 있음을 나타냅니다.
  2. Warning: 프로그램의 실행에 문제를 일으킬 수 있는 잠재적인 위험을 나타냅니다.
  3. Information: 프로그램의 일반적인 작동 정보를 나타냅니다.
  4. SuccessAudit: 보안 감사 이벤트가 성공적으로 발생했음을 나타냅니다.
  5. FailureAudit: 보안 감사 이벤트가 실패했음을 나타냅니다.

 

 

참고사이트

 

https://www.infoworld.com/article/3598750/how-to-log-data-to-the-windows-event-log-in-csharp.html

 

How to log data to the Windows Event Log in C#

Take advantage of the Windows Event Log to store the log data of your .NET Core applications running on Windows

www.infoworld.com