/// <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); }
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()); }