/// <summary>
        ///     Configure SEQ logging from environment variables.
        /// </summary>
        /// <param name="configuration">
        ///     The language server's Seq logging configuration.
        /// </param>
        static void ConfigureSeq(SeqLoggingConfiguration configuration)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            // We have to use environment variables here since at configuration time there's no LSP connection yet.
            configuration.Url    = Environment.GetEnvironmentVariable("MSBUILD_PROJECT_TOOLS_SEQ_URL");
            configuration.ApiKey = Environment.GetEnvironmentVariable("MSBUILD_PROJECT_TOOLS_SEQ_API_KEY");
        }
        public void ApplyLoggingConfiguration(bool isUsed, bool isActive, bool wasApplied)
        {
            // arrange
            ApplicationConfigurationHelper.AdjustKeys("log.seq", isUsed.ToString());
            var serilogConfigurationDummy = new Mock <LoggerConfiguration>();
            var sut = new SeqLoggingConfiguration();

            // act
            sut.Apply(serilogConfigurationDummy.Object);

            // assert
            sut.SeqHost.Should().Be(SeqHost);
            sut.LogToSeq.Should().Be(isUsed);
            sut.IsActive.Should().Be(isActive);
            sut.WasApplied.Should().Be(wasApplied);
        }
Beispiel #3
0
        public ILogger Build()
        {
            _loggerConfiguration = _loggerConfiguration ?? new LoggerConfiguration();

            var jgLoggingConfiguration = new JgLoggingConfiguration();

            var enrichLoggingConfig = new EnrichLoggingConfiguration();

            _configuration?.Bind("JG-Logging:Enrich", enrichLoggingConfig);

            _configuration?.Bind("JG-Logging:Serilog", jgLoggingConfiguration);

            if (jgLoggingConfiguration.WriteToSeq)
            {
                var seqLoggingConfig = new SeqLoggingConfiguration();

                _configuration?.Bind("JG-Logging:Serilog:Seq", seqLoggingConfig);

                _loggerConfiguration
                .Destructure.JsonNetTypes()
                .WriteTo.Seq(
                    seqLoggingConfig.ServerUrl,
                    seqLoggingConfig.RestrictedToMinimumLevel,
                    seqLoggingConfig.BatchPostingLimit,
                    seqLoggingConfig.Period,
                    seqLoggingConfig.ApiKey,
                    seqLoggingConfig.BufferBaseFilename,
                    seqLoggingConfig.BufferSizeLimitBytes,
                    seqLoggingConfig.EventBodyLimitBytes,
                    seqLoggingConfig.ControlLevelSwitch,
                    null,
                    seqLoggingConfig.RetainedInvalidPayloadsLimitBytes,
                    seqLoggingConfig.Compact,
                    seqLoggingConfig.QueueSizeLimit);
            }

            if (jgLoggingConfiguration.WriteToColoredConsole)
            {
                _loggerConfiguration.WriteTo.ColoredConsole();
            }

            if (jgLoggingConfiguration.WriteToFile)
            {
                var fileLoggingConfig = new FileLoggingConfiguration();

                _loggerConfiguration.WriteTo.File(
                    // Note: IIS requires write access
                    Path.Combine(Environment.CurrentDirectory, fileLoggingConfig.Path),
                    fileLoggingConfig.RestrictedToMinimumLevel,
                    fileLoggingConfig.OutputTemplate,
                    null,
                    fileLoggingConfig.FileSizeLimitBytes,
                    fileLoggingConfig.LevelSwitch,
                    fileLoggingConfig.Buffered,
                    fileLoggingConfig.Shared,
                    fileLoggingConfig.FlushToDiskInterval,
                    fileLoggingConfig.RollingInterval,
                    fileLoggingConfig.RollOnFileSizeLimit,
                    fileLoggingConfig.RetainedFileCountLimit);
            }


            _loggerConfiguration
            .Enrich.FromLogContext()
            .Enrich.WithExceptionDetails()
            .Enrich.WithMachineName()
            .Enrich.WithEnvironmentUserName()
            .Enrich.WithProcessName()
            .Enrich.WithProcessId()
            .Enrich.WithProperty(LogProps.APPLICATION, "JG.FinTechTest")
            .Enrich.WithProperty(LogProps.ENVIRONMENT, _environment)
            .Enrich.WithProperty(LogProps.ENV_NAME, enrichLoggingConfig.EnvName);

            _loggerConfiguration.MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Error)
            .MinimumLevel.Override("System", LogEventLevel.Error);

            _loggerConfiguration.Enrich.With(new CorrelationEnricher(new CorrelationContextAccessor()));

            // TODO: Revisit this, although Props is shorter, how much does it cost us to clone the dictionary?
            _loggerConfiguration.Destructure.ByTransformingWhere <Props>(type => type == typeof(Props), value =>
                                                                         value.ToDictionary(entry => entry.Key,
                                                                                            entry => entry.Value));

            return(_loggerConfiguration.CreateLogger());
        }