public XUnitLogger(ITestOutputHelper testOutputHelper, LoggerExternalScopeProvider scopeProvider, string categoryName) { _testOutputHelper = testOutputHelper; _scopeProvider = scopeProvider; _categoryName = categoryName; }
public void ConsoleLoggerOptions_OptionChange_IsReloaded() { var monitor = new TestFormatterOptionsMonitor <GoogleCloudConsoleFormatterOptions>(new GoogleCloudConsoleFormatterOptions()); var formatter = new GoogleCloudConsoleFormatter(monitor); var scopeProvider = new LoggerExternalScopeProvider(); var logEntry = new LogEntry <string>(LogLevel.Information, "LogCategory", new EventId(1), "test", exception: null, (state, exception) => state); var writer = new StringWriter { NewLine = "\n" }; formatter.Write(logEntry, scopeProvider: scopeProvider, writer); var expectedJson = "{\"message\":\"test\",\"severity\":\"INFO\"}\n"; var actualJson = writer.ToString(); Assert.Equal(expectedJson, actualJson); monitor.Set(new GoogleCloudConsoleFormatterOptions { IncludeScopes = true }); var writerScope = new StringWriter { NewLine = "\n" }; formatter.Write(logEntry, scopeProvider: scopeProvider, writerScope); var actualJsonWithScope = writerScope.ToString(); var expectedJsonWithScope = "{\"message\":\"test\",\"severity\":\"INFO\",\"scopes\":[]}\n"; Assert.Equal(expectedJsonWithScope, actualJsonWithScope); }
public void CanDuckTypeExternalScopeProvider() { var scopeProvider = new LoggerExternalScopeProvider(); var proxy = scopeProvider.DuckCast <IExternalScopeProvider>(); proxy.Should().NotBeNull(); using var scope = proxy.Push(123); scope.Should().NotBeNull(); }
public FileLoggerTests() { _logFilePath = Path.Combine(Path.GetTempPath(), "WebJobs.Script.Tests", "FileLoggerTests"); _category = LogCategories.CreateFunctionCategory("Test"); if (Directory.Exists(_logFilePath)) { Directory.Delete(_logFilePath, recursive: true); } _fileWriter = new FileWriter(_logFilePath); _scopeProvider = new LoggerExternalScopeProvider(); }
public void CanDuckTypeExternalScopeProviderAndUseWithProxyProvider() { var scopeProvider = new LoggerExternalScopeProvider(); var loggerProvider = new DirectSubmissionLoggerProvider(new NullDatadogSink(), LogSettingsHelper.GetFormatter(), DirectSubmissionLogLevel.Debug); var proxyProvider = (ISupportExternalScope)loggerProvider.DuckImplement(_iloggerProviderType); proxyProvider.SetScopeProvider(scopeProvider); var logger = loggerProvider.CreateLogger("Test logger name"); using var scope = logger.BeginScope(123); scope.Should().NotBeNull(); logger.IsEnabled(3).Should().BeTrue(); logger.Log(logLevel: 3, 12, state: 123, null, (state, ex) => $"This is my message with a {state}"); }
private void AddProviderRegistration(ILoggerProvider provider, bool dispose) { _providerRegistrations.Add(new ProviderRegistration { Provider = provider, ShouldDispose = dispose }); if (provider is ISupportExternalScope supportsExternalScope) { if (ScopeProvider == null) { ScopeProvider = new LoggerExternalScopeProvider(); } supportsExternalScope.SetScopeProvider(ScopeProvider); } }
public void Log_EmptyScopeWithoutInfo() { var formatter = CreateFormatter(new GoogleCloudConsoleFormatterOptions { IncludeScopes = true }); var logEntry = new LogEntry <string>(LogLevel.Information, "LogCategory", new EventId(1), "test", exception: null, (state, exception) => state); var writer = new StringWriter { NewLine = "\n" }; var scopeProvider = new LoggerExternalScopeProvider(); formatter.Write(logEntry, scopeProvider: scopeProvider, writer); var expectedJson = "{\"message\":\"test\",\"severity\":\"INFO\",\"scopes\":[]}\n"; var actualJson = writer.ToString(); Assert.Equal(expectedJson, actualJson); }
public void SerializesEventCorrectly() { var formatter = LogSettingsHelper.GetFormatter(); var scopeProvider = new LoggerExternalScopeProvider(); var logger = new TestLogger(scopeProvider, formatter, new DateTime(2021, 09, 13, 10, 40, 57)); scopeProvider.Push(new Dictionary <string, object> { { "OtherProperty", 62 } }); scopeProvider.Push("Some other value"); logger.Log( LogLevel.Debug, new InvalidOperationException("Oops, just a test!"), "This is a test with a {Value}", 123); var expected = @"{""@t"":""2021-09-13T10:40:57.0000000Z"",""@m"":""This is a test with a 123"",""@l"":""Debug"",""@x"":""System.InvalidOperationException: Oops, just a test!"",""Value"":123,""OtherProperty"":62,""Scopes"":[""Some other value""]""@i"":""a9a87aee"",""ddsource"":""csharp"",""service"":""MyTestService"",""host"":""some_host""}"; logger.Logs.Should().ContainSingle(expected); }
public void DoesntAddPropertiesThatAreAlreadyAddedTwice() { var formatter = LogSettingsHelper.GetFormatter(); var scopeProvider = new LoggerExternalScopeProvider(); var logger = new TestLogger(scopeProvider, formatter, new DateTime(2021, 09, 13, 10, 40, 57)); var properties = new Dictionary <string, object> { { "Host", nameof(DoesntAddPropertiesThatAreAlreadyAddedTwice) + "host" }, { "dd_service", nameof(DoesntAddPropertiesThatAreAlreadyAddedTwice) + "service" }, { "ddsource", nameof(DoesntAddPropertiesThatAreAlreadyAddedTwice) + "source" }, { "ddtags", nameof(DoesntAddPropertiesThatAreAlreadyAddedTwice) + ":tag" }, }; using (scopeProvider.Push(properties)) using (scopeProvider.Push("Another value")) { logger.Log( LogLevel.Debug, new InvalidOperationException("Oops, just a test!"), "This is a test with a {Value} and a {Host}", 123, "some host"); } var log = logger.Logs.Should().ContainSingle().Subject; var json = JObject.Parse(log); // should have all the added properties foreach (var property in properties) { json.Properties() .Where(x => string.Equals(property.Key, x.Name, StringComparison.OrdinalIgnoreCase)) .Should() .ContainSingle() .Which.Value.ToString() .Should() .Be(property.Value.ToString()); } }
public XUnitLogger(ITestOutputHelper testOutputHelper, LoggerExternalScopeProvider scopeProvider) : base(testOutputHelper, scopeProvider, typeof(T).FullName) { }
/// <summary> /// /// </summary> /// <typeparam name="TState"></typeparam> /// <param name="state"></param> /// <returns></returns> public IDisposable BeginScope <TState>(TState state) { LoggerInformation[] loggers = this.Loggers; bool flag = loggers == null; IDisposable result; if (flag) { result = NullScope.Instance; } else { LoggerExternalScopeProvider scopeProvider = this._loggerFactory.ScopeProvider; int scopeCount = this._scopeCount; bool flag2 = scopeProvider != null; if (flag2) { bool flag3 = scopeCount == 0; if (flag3) { return(scopeProvider.Push(state)); } scopeCount++; } Logger.Scope scope = new Logger.Scope(scopeCount); List <Exception> exceptions = null; foreach (LoggerInformation loggerInformation in loggers) { bool externalScope = loggerInformation.ExternalScope; if (!externalScope) { try { scopeCount--; bool flag4 = scopeCount >= 0; if (flag4) { IDisposable disposable = loggerInformation.Logger.BeginScope <TState>(state); scope.SetDisposable(scopeCount, disposable); } } catch (Exception ex) { bool flag5 = exceptions == null; if (flag5) { exceptions = new List <Exception>(); } exceptions.Add(ex); } } } bool flag6 = scopeProvider != null; if (flag6) { scope.SetDisposable(0, scopeProvider.Push(state)); } bool flag7 = exceptions != null && exceptions.Count > 0; if (flag7) { throw new AggregateException("An error occurred while writing to logger(s).", exceptions); } result = scope; } return(result); }
public EventLogger(string loggerName) { _loggerExternalScopeProvider = new LoggerExternalScopeProvider(); _loggerName = loggerName; }
public InMemoryLogger(string name, Func <string, LogLevel, bool> filter) { Name = name ?? throw new ArgumentNullException(nameof(name)); Filter = filter ?? ((_, _) => true); ScopeProvider = new LoggerExternalScopeProvider(); }
public LogProvider(LoggerExternalScopeProvider scopeProvider, PulseConfiguration pulseConfig) { _scopeProvider = scopeProvider; _logConfig = pulseConfig.GetProvider <LogConfiguration>(nameof(LogProvider)); _logStream = new ReplaySubject <LogItem>(_logConfig.Buffer); }