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);
}
}