Skip to content

Instantly share code, notes, and snippets.

@teyc
Last active March 11, 2024 12:05
Show Gist options
  • Select an option

  • Save teyc/b07e0c64ca29474f3d593bee5abeb2f3 to your computer and use it in GitHub Desktop.

Select an option

Save teyc/b07e0c64ca29474f3d593bee5abeb2f3 to your computer and use it in GitHub Desktop.
Enterprise Log Lib Serilog Listener
[ConfigurationElementType(typeof(CustomTraceListenerData))]
public class SerilogTraceListener: CustomTraceListener
{
public override void Write(string message)
{
}
public override void WriteLine(string message)
{
}
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
{
if (data is LogEntry logEntry)
{
var logLevel = GetLogLevel(logEntry.Severity);
var logger = Log.Logger;
foreach (var extendedProperty in logEntry.ExtendedProperties)
{
logger = logger.ForContext(extendedProperty.Key, extendedProperty.Value);
}
var exception = string.IsNullOrWhiteSpace(logEntry.ErrorMessages)
? null
: new Exception(logEntry.ErrorMessages);
logger.Write(logLevel, exception, logEntry.Message);
return;
}
base.TraceData(eventCache, source, eventType, id, data);
}
private LogEventLevel GetLogLevel(TraceEventType severity)
{
switch (severity)
{
case TraceEventType.Critical:
return LogEventLevel.Fatal;
case TraceEventType.Error:
return LogEventLevel.Error;
case TraceEventType.Warning:
return LogEventLevel.Warning;
case TraceEventType.Information:
return LogEventLevel.Information;
case TraceEventType.Verbose:
return LogEventLevel.Debug;
case TraceEventType.Start:
return LogEventLevel.Information;
case TraceEventType.Stop:
return LogEventLevel.Information;
case TraceEventType.Suspend:
return LogEventLevel.Information;
case TraceEventType.Resume:
return LogEventLevel.Information;
case TraceEventType.Transfer:
return LogEventLevel.Information;
default:
throw new ArgumentOutOfRangeException(nameof(severity), severity, null);
}
}
}
<configuration>
<configSections>
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
</configSections>
<loggingConfiguration name="Logging" tracingEnabled="false" defaultCategory="General">
<listeners>
<add name="Serilog Trace Listener" type="AllianzGlobalAssistAU.Roadside.WebSite.Bmw.Helper.SerilogTraceListener, AllianzGlobalAssistAU.Roadside.WebSite.Bmw" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging" />
</listeners>
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="Serilog Trace Listener" />
</listeners>
</add>
</loggingConfiguration>
</configuration>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment