static LanguageKernelTestBase() { var artifactsPath = new DirectoryInfo("."); while (artifactsPath.Name != "artifacts") { if (artifactsPath.Parent != null) { artifactsPath = artifactsPath.Parent; } else { break; } } var logPath = artifactsPath.Name == "artifacts" ? Path.Combine( artifactsPath.ToString(), "log", "Release") : "."; var log = new SerilogLoggerConfiguration() .WriteTo .RollingFileAlternate(logPath, outputTemplate: "{Message}{NewLine}") .CreateLogger(); LogEvents.Subscribe( e => log.Information(e.ToLogString())); }
internal static IDisposable StartToolLogging(StartupOptions options) { var disposables = new CompositeDisposable(); if (options.LogPath != null) { var log = new SerilogLoggerConfiguration() .WriteTo .RollingFileAlternate(options.LogPath.FullName, outputTemplate: "{Message}{NewLine}") .CreateLogger(); var subscription = LogEvents.Subscribe( e => log.Information(e.ToLogString()), _assembliesEmittingPocketLoggerLogs); disposables.Add(subscription); disposables.Add(log); } if (options.Verbose) { disposables.Add( LogEvents.Subscribe(e => Console.WriteLine(e.ToLogString()), _assembliesEmittingPocketLoggerLogs)); } TaskScheduler.UnobservedTaskException += (sender, args) => { Log.Warning($"{nameof(TaskScheduler.UnobservedTaskException)}", args.Exception); args.SetObserved(); }; return(disposables); }
public ILogger CreateLogger(string categoryName) { LogEventLevel eventLevel = _serilogOptions.MinimumLevel.Default; foreach (var overrideOption in _serilogOptions.MinimumLevel.Override) { if (categoryName.StartsWith(overrideOption.Key)) { eventLevel = overrideOption.Value; } } // Chain new loggers to the global loggers with its own switch // taking into accound any "Overrides" var levelSwitch = new LoggingLevelSwitch(eventLevel); _loggerSwitches.GetOrAdd(categoryName, levelSwitch); var serilogger = new Serilog.LoggerConfiguration() .MinimumLevel.ControlledBy(levelSwitch) .WriteTo.Logger(_globalLogger) .CreateLogger(); var factory = new SerilogLoggerFactory(serilogger, true); return(_loggers.GetOrAdd(categoryName, factory.CreateLogger(categoryName))); }
public static Serilog.LoggerConfiguration WithLazyProperties( this LoggerEnrichmentConfiguration loggerEnrichmentConfiguration, IDictionary <string, Func <object> > properties) { if (loggerEnrichmentConfiguration == null) { throw new ArgumentNullException(nameof(loggerEnrichmentConfiguration)); } if (properties == null) { throw new ArgumentNullException(nameof(properties)); } if (properties.Count == 0) { throw new ArgumentException("Logger properties count cannot be zero.", nameof(properties)); } Serilog.LoggerConfiguration loggerConfiguration = null; foreach (var property in properties) { loggerConfiguration = loggerEnrichmentConfiguration.WithProperty(property.Key, property.Value()); } return(loggerConfiguration); }
/// <summary> /// Sets Steeltoe <see cref="IDynamicLoggerProvider"/> Serilog implementation as a LoggerProvider which supports /// dynamically controlling the minimum log level via management endpoints /// </summary> /// <param name="builder">The <see cref="IWebHostBuilder"/> for configuring the WebHostBuilder </param> /// <param name="configureLogger">The delegate for configuring the <see cref="LoggerConfiguration" /> that will be used to construct a <see cref="Serilog.Core.Logger" /></param> /// <param name="preserveStaticLogger">Indicates whether to preserve the value of <see cref="Serilog.Log.Logger"/>.</param> /// <returns>The <see cref="IWebHostBuilder"/></returns> public static IWebHostBuilder UseSerilogDynamicConsole(this IWebHostBuilder builder, Action <WebHostBuilderContext, Serilog.LoggerConfiguration> configureLogger, bool preserveStaticLogger = false) { builder.ConfigureServices((WebHostBuilderContext context, IServiceCollection services) => { services.AddSingleton <ISerilogOptions, SerilogOptions>(); var loggerConfiguration = new Serilog.LoggerConfiguration(); configureLogger(context, loggerConfiguration); var serilogOptions = new SerilogOptions(context.Configuration); // Add a level switch that controls the "Default" level at the root var levelSwitch = new LoggingLevelSwitch(serilogOptions.MinimumLevel.Default); loggerConfiguration.MinimumLevel.ControlledBy(levelSwitch); var logger = loggerConfiguration.CreateLogger(); if (!preserveStaticLogger) { Serilog.Log.Logger = logger; } services.AddSingleton <IDynamicLoggerProvider>(sp => new SerilogDynamicProvider(sp.GetRequiredService <IConfiguration>(), logger, levelSwitch)); services.AddSingleton <ILoggerFactory>(sp => new SerilogDynamicLoggerFactory(sp.GetRequiredService <IDynamicLoggerProvider>())); }); return(builder); }
public static IApplicationLogger CreateApplicationLogger(ITestOutputHelper output) { var logger = new Serilog.LoggerConfiguration() .MinimumLevel.Verbose() .WriteTo.Sink(new ApplicationLoggerTestOutputHelper(output)) .CreateLogger(); return(ApplicationLogger.Create(logger)); }
private static void StartLogging(CompositeDisposable disposables, StartupOptions options) { if (options.Production) { var applicationVersion = VersionSensor.Version().AssemblyInformationalVersion; var websiteSiteName = Environment.GetEnvironmentVariable("WEBSITE_SITE_NAME") ?? "UNKNOWN-AGENT"; var regionId = options.RegionId ?? "undefined"; disposables.Add( LogEvents.Enrich(a => { a(("regionId", regionId)); a(("applicationVersion", applicationVersion)); a(("websiteSiteName", websiteSiteName)); a(("id", options.Id)); })); } if (options.LogPath != null) { var log = new SerilogLoggerConfiguration() .WriteTo .RollingFileAlternate(options.LogPath.FullName, outputTemplate: "{Message}{NewLine}") .CreateLogger(); var subscription = LogEvents.Subscribe( e => log.Information(e.ToLogString()), _assembliesEmittingPocketLoggerLogs); disposables.Add(subscription); disposables.Add(log); } if (options.Verbose) { disposables.Add( LogEvents.Subscribe(e => Console.WriteLine(e.ToLogString()), _assembliesEmittingPocketLoggerLogs)); } TaskScheduler.UnobservedTaskException += (sender, args) => { Log.Warning($"{nameof(TaskScheduler.UnobservedTaskException)}", args.Exception); args.SetObserved(); }; if (options.ApplicationInsightsKey != null) { var telemetryClient = new TelemetryClient(new TelemetryConfiguration(options.ApplicationInsightsKey)) { InstrumentationKey = options.ApplicationInsightsKey }; disposables.Add(telemetryClient.SubscribeToPocketLogger(_assembliesEmittingPocketLoggerLogs)); } Log.Event("AgentStarting"); }
static LanguageKernelTestBase() { var log = new SerilogLoggerConfiguration() .WriteTo .RollingFileAlternate(".", outputTemplate: "{Message}{NewLine}") .CreateLogger(); var subscription = LogEvents.Subscribe( e => log.Information(e.ToLogString())); }
public ILogger CreateLogger(string categoryName) { var eventLevel = GetLevel(categoryName); var levelSwitch = new LoggingLevelSwitch(eventLevel); _loggerSwitches.GetOrAdd(categoryName, levelSwitch); var serilogger = new Serilog.LoggerConfiguration() .MinimumLevel.ControlledBy(levelSwitch) .WriteTo.Logger(_globalLogger) .CreateLogger(); var factory = new SerilogLoggerFactory(serilogger, true); return(_loggers.GetOrAdd(categoryName, factory.CreateLogger(categoryName))); }
public void SerilogOptions_Set_Correctly_Via_LoggerConfiguration() { var loggerConfiguration = new Serilog.LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) .MinimumLevel.Override("Steeltoe.Extensions", LogEventLevel.Verbose) .MinimumLevel.Override("Steeltoe", LogEventLevel.Information); var serilogOptions = new SerilogOptions(); serilogOptions.SetSerilogOptions(loggerConfiguration); Assert.Equal(LogEventLevel.Debug, serilogOptions.MinimumLevel.Default); Assert.Equal(LogEventLevel.Warning, serilogOptions.MinimumLevel.Override["Microsoft"]); Assert.Equal(LogEventLevel.Verbose, serilogOptions.MinimumLevel.Override["Steeltoe.Extensions"]); Assert.NotNull(serilogOptions.GetSerilogConfiguration()); }
public void WriteALogLine() { var columnOptions = new ColumnOptions(additionalDataColumns: new[] { new DataColumnMapping("Service", NpgsqlDbType.Text), new DataColumnMapping("MachineName", NpgsqlDbType.Text) }); var config = new Serilog.LoggerConfiguration() .Enrich.WithProperty("Service", "Tests") .Enrich.WithProperty("MachineName", Environment.MachineName) .WriteTo.Pgsql("Host=localhost;Database=logs_test;Username=postgres;Password=wblyStOLVnpyGKYv7sWr", "Logs", columnOptions: columnOptions); using (var logger = config.CreateLogger()) { logger.Information("Hello world {@Bottle}", new { Liquid = "Water", Price = new { Amount = 5.0, Currency = "Euro" } }); } }