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()));
        }
Example #2
0
        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));
        }
Example #7
0
        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");
        }
Example #8
0
        static LanguageKernelTestBase()
        {
            var log = new SerilogLoggerConfiguration()
                      .WriteTo
                      .RollingFileAlternate(".", outputTemplate: "{Message}{NewLine}")
                      .CreateLogger();

            var subscription = LogEvents.Subscribe(
                e => log.Information(e.ToLogString()));
        }
Example #9
0
        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)));
        }
Example #10
0
        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());
        }
Example #11
0
        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" } });
            }
        }