I try to log to ES through Serilog and I'm having trouble getting the enrichment to work. I should like to include values from my app.config to leverage information updated by deployment.
None of the fields are shown in ES/Rolling file. I've verified that the values are read as expected from app.config.
Setup: Console application, static logger instance, Enrich.With<>
Any ideas as to what I doing wrong?
public class SettingsEnricher : ILogEventEnricher
{
public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
{
var settings = new SettingsFromConfigFile();
propertyFactory.CreateProperty("Environment", settings.Environment);
propertyFactory.CreateProperty("SuiteName", settings.SuiteName);
propertyFactory.CreateProperty("ComponentName", settings.ComponentName);
propertyFactory.CreateProperty("ReleaseNumber", settings.ReleaseNumber);
}
}
public class SettingsFromConfigFile
{
public SettingsFromConfigFile()
{
Environment = ConfigurationManager.AppSettings["Environment"];
SuiteName = ConfigurationManager.AppSettings["SuiteName"];
ComponentName = ConfigurationManager.AppSettings["ComponentName"];
LogFileDirectory = ConfigurationManager.AppSettings["LogFileDirectory"];
EsLoggingUrl = ConfigurationManager.AppSettings["EsLoggingUrl"];
ReleaseNumber = ConfigurationManager.AppSettings["ReleaseNumber"];
FileName = $"{LogFileDirectory}{SuiteName}.{ComponentName}.log";
EsLoggingUri = new Uri(EsLoggingUrl);
ElasticsearchSinkOptions = new ElasticsearchSinkOptions(EsLoggingUri);
}
public string LogFileDirectory { get; set; }
public string ReleaseNumber { get; set; }
public string ComponentName { get; set; }
public string SuiteName { get; set; }
public string FileName { get; set; }
public string EsLoggingUrl { get; set; }
public Uri EsLoggingUri { get; set; }
public ElasticsearchSinkOptions ElasticsearchSinkOptions { get; set; }
public string Environment { get; set; }
}
public class StandardLoggerConfigurator
{
public static ILogger GetEnrichedLogger()
{
var settings = new SettingsFromConfigFile();
return new LoggerConfiguration()
.Enrich.With<SettingsEnricher>()
//.Enrich.FromLogContext()
.WriteTo.RollingFile(settings.FileName)
.WriteTo.Elasticsearch(settings.ElasticsearchSinkOptions)
.CreateLogger();
}
}
internal class Program
{
private static void Main(string[] args)
{
Log.Logger = StandardLoggerConfigurator.GetEnrichedLogger();
Log.Logger.Information("Starting service!!!!!");