protected override void Append()

in src/log4net/Appender/EventLogAppender.cs [316:403]


  protected override void Append(LoggingEvent loggingEvent)
  {
    //
    // Write the resulting string to the event log system
    //
    int eventId = EventId;

    // Look for the EventID property
    if (loggingEvent.EnsureNotNull().LookupProperty("EventID") is object eventIdPropertyObj)
    {
      if (eventIdPropertyObj is int eventIdInt)
      {
        eventId = eventIdInt;
      }
      else
      {
        if (eventIdPropertyObj is not string eventIdPropertyString)
        {
          eventIdPropertyString = eventIdPropertyObj.ToString();
        }
        if (eventIdPropertyString.Length > 0)
        {
          // Read the string property into a number
          if (SystemInfo.TryParse(eventIdPropertyString, out int intVal))
          {
            eventId = intVal;
          }
          else
          {
            ErrorHandler.Error($"Unable to parse event ID property [{eventIdPropertyString}].");
          }
        }
      }
    }

    short category = Category;
    // Look for the Category property
    if (loggingEvent.LookupProperty("Category") is object categoryPropertyObj)
    {
      if (categoryPropertyObj is short shortValue)
      {
        category = shortValue;
      }
      else
      {
        if (categoryPropertyObj is not string categoryPropertyString)
        {
          categoryPropertyString = categoryPropertyObj.ToString();
        }

        if (categoryPropertyString.Length > 0)
        {
          // Read the string property into a number
          if (SystemInfo.TryParse(categoryPropertyString, out short shortVal))
          {
            category = shortVal;
          }
          else
          {
            ErrorHandler.Error($"Unable to parse event category property [{categoryPropertyString}].");
          }
        }
      }
    }

    // Write to the event log
    try
    {
      string eventTxt = RenderLoggingEvent(loggingEvent);

      // There is a limit of about 32K characters for an event log message
      if (eventTxt.Length > _maxEventlogMessageSize)
      {
        eventTxt = eventTxt.Substring(0, _maxEventlogMessageSize);
      }

      EventLogEntryType entryType = GetEntryType(loggingEvent.Level);

      using (SecurityContext?.Impersonate(this))
      {
        EventLog.WriteEntry(ApplicationName, eventTxt, entryType, eventId, category);
      }
    }
    catch (Exception e) when (!e.IsFatal())
    {
      ErrorHandler.Error($"Unable to write to event log [{LogName}] using source [{ApplicationName}]", e);
    }
  }