Exemplo n.º 1
0
 public XUnitLogger(ITestOutputHelper testOutputHelper, LoggerExternalScopeProvider scopeProvider,
                    string categoryName)
 {
     _testOutputHelper = testOutputHelper;
     _scopeProvider    = scopeProvider;
     _categoryName     = categoryName;
 }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 4
0
        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}");
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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());
            }
        }
Exemplo n.º 10
0
 public XUnitLogger(ITestOutputHelper testOutputHelper, LoggerExternalScopeProvider scopeProvider)
     : base(testOutputHelper, scopeProvider, typeof(T).FullName)
 {
 }
Exemplo n.º 11
0
        /// <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);
        }
Exemplo n.º 12
0
 public EventLogger(string loggerName)
 {
     _loggerExternalScopeProvider = new LoggerExternalScopeProvider();
     _loggerName = loggerName;
 }
Exemplo n.º 13
0
 public InMemoryLogger(string name, Func <string, LogLevel, bool> filter)
 {
     Name          = name ?? throw new ArgumentNullException(nameof(name));
     Filter        = filter ?? ((_, _) => true);
     ScopeProvider = new LoggerExternalScopeProvider();
 }
Exemplo n.º 14
0
 public LogProvider(LoggerExternalScopeProvider scopeProvider, PulseConfiguration pulseConfig)
 {
     _scopeProvider = scopeProvider;
     _logConfig     = pulseConfig.GetProvider <LogConfiguration>(nameof(LogProvider));
     _logStream     = new ReplaySubject <LogItem>(_logConfig.Buffer);
 }