public static IAppBuilder ConfigureSerilog(this IAppBuilder app, HttpConfiguration config) { config.Services.Add(typeof(IExceptionLogger), new SerilogExceptionLogger()); var assembly = typeof(SerilogConfig).Assembly.GetName(); var configurationProvider = new ConfigurationProvider(AppSettingKey.Prefix); var logEventLevel = configurationProvider.Get(AppSettingKey.SerilogLoggingLevel, LogEventLevel.Error); const string logFileName = "talentsearch-api.json"; var logFilePath = Path.Combine(configurationProvider.Get(AppSettingKey.SerilogFilePath), logFileName); var serilog = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Sink(new RollingFileSink( logFilePath, textFormatter: new JsonFormatter(renderMessage: true), fileSizeLimitBytes: 100000000, retainedFileCountLimit: 14), logEventLevel) .Enrich.WithMachineName() .Enrich.With() .Enrich.WithProperty("ApplicationName", assembly.Name) .Enrich.WithProperty("ApplicationVersion", assembly.Version) .Enrich.WithProperty("UserName", Environment.UserName) .Enrich.WithProperty("AppDomain", AppDomain.CurrentDomain) .Enrich.WithProperty("RuntimeVersion", Environment.Version) // this ensures that calls to LogContext.PushProperty will cause the logger to be enriched .Enrich.FromLogContext(); if (Environment.UserInteractive || Environment.OSVersion.Platform == PlatformID.Unix) { serilog = serilog.WriteTo.ColoredConsole(logEventLevel); } Log.Logger = serilog.CreateLogger(); app.SetLoggerFactory(new Serilog.Extras.MSOwin.LoggerFactory(Log.Logger)); app.UseSerilogRequestContext(); Log.Debug("Owin_Startup"); return app; }