Example #1
0
        public void CanReverseDuckTypeTarget()
        {
            var targetType = typeof(Target);
            var target     = NLogHelper.CreateTarget(new NullDatadogSink(), DirectSubmissionLogLevel.Debug);
            var proxy      = NLogCommon <Target> .CreateNLogTargetProxy(target);

            proxy.Should().NotBeNull();
            proxy.GetType().Should().BeDerivedFrom(targetType);

            var message    = "the message";
            var logInfo    = new AsyncLogEventInfo(LogEventInfo.Create(LogLevel.Error, "test", message), _ => { });
            var typedProxy = ((Target)proxy);

            typedProxy.WriteAsyncLogEvent(logInfo); // should not throw

#if NLOG_45
            var proxyOfProxy = proxy.DuckCast <ITargetWithContextBaseProxy>();
            proxyOfProxy.Should().NotBeNull();

            var results = proxyOfProxy.GetAllProperties(logInfo.LogEvent.DuckCast <ILogEventInfoProxy>());
            results.Should().NotBeNull();

            target.SetBaseProxy(proxyOfProxy);
#endif
        }
        public void ShouldNotEmitLogWhenNotEnabled()
        {
            var sink        = new NLogHelper.TestSink();
            var nlogSink    = NLogHelper.CreateTarget(sink, DirectSubmissionLogLevel.Warning);
            var targetProxy = (global::NLog.Targets.Target) NLogCommon <LoggingConfiguration> .CreateNLogTargetProxy(nlogSink);

            var level    = LogLevel.Info;
            var logEvent = new LogEventInfo(level, nameof(LoggerEnqueuesLogMessage), "This is some value");

            var proxy = NLogHelper.GetLogEventProxy(logEvent);

            nlogSink.Write(proxy);

            sink.Events.Should().BeEmpty();
        }
        public void LoggerEnqueuesLogMessage()
        {
            var sink        = new NLogHelper.TestSink();
            var nlogSink    = NLogHelper.CreateTarget(sink, DirectSubmissionLogLevel.Debug);
            var targetProxy = (global::NLog.Targets.Target) NLogCommon <LoggingConfiguration> .CreateNLogTargetProxy(nlogSink);

            var level    = LogLevel.Error;
            var logEvent = new LogEventInfo(level, nameof(LoggerEnqueuesLogMessage), "This is some value");

            var proxy = NLogHelper.GetLogEventProxy(logEvent);

            nlogSink.Write(proxy);

            sink.Events.Should().ContainSingle();
        }
Example #4
0
        public void CanDuckTypeMdlc()
        {
            var assembly = typeof(Target).Assembly;

            NLogCommon <Target> .TryGetMdlcProxy(
                assembly,
                out var haveProxy,
                out var isModernMdlcProxy,
                out var mdlc,
                out var mdlcLegacy);

            haveProxy.Should().BeTrue();

            if (isModernMdlcProxy)
            {
                mdlc.Should().NotBeNull();
                mdlc.GetNames().Should().BeEmpty();
            }
            else
            {
                mdlcLegacy.LogicalThreadDictionary.Should().BeEmpty();
            }

            var key   = "mykey";
            var value = "myvalue";

            global::NLog.MappedDiagnosticsLogicalContext.Set(key, value);
            if (isModernMdlcProxy)
            {
                var containsKey = mdlc.GetNames().Should().NotBeNull().And.ContainSingle().Subject;
                mdlc.GetObject(containsKey)
                .Should()
                .NotBeNull()
                .And.Be(value);

                global::NLog.MappedDiagnosticsLogicalContext.Remove(key);
                mdlc.GetNames().Should().BeEmpty();
            }
            else
            {
                mdlcLegacy.LogicalThreadDictionary.Keys.Cast <string>().Should().ContainSingle(key);
                mdlcLegacy.LogicalThreadDictionary[key].Should().Be(value);

                global::NLog.MappedDiagnosticsLogicalContext.Remove(key);
                mdlcLegacy.LogicalThreadDictionary.Should().BeEmpty();
            }
        }
        public void LoggerIncludesPropertiesInLog()
        {
            var formatter   = LogSettingsHelper.GetFormatter();
            var sink        = new NLogHelper.TestSink();
            var target      = NLogHelper.CreateTarget(sink, DirectSubmissionLogLevel.Debug);
            var targetProxy = NLogCommon <LoggingConfiguration> .CreateNLogTargetProxy(target);

            var config = new LoggingConfiguration();

            NLogHelper.AddTargetToConfig(config, targetProxy);

            var logFactory = new LogFactory(config);
            var logger     = logFactory.GetLogger(nameof(LoggerIncludesPropertiesInLog));

            // We don't currently record NDC/NDLC
#if NLOG_45
            var messageTemplate = "This is a message with {Value}";
#else
            var messageTemplate = "This is a message with {0}";
#endif
            var mdcKey   = "some mdcKey";
            var mdcValue = "some mdcValue";
#if !NLOG_2
            var mdclKey   = "some mdclKey";
            var mdclValue = "some mdclValue";
#endif
            // var nestedScope = "some nested name";
            // var nestedDictionary = new Dictionary<string, object> { { "nlcKey", 657 } };
            // var dictValues = nestedDictionary.First();
            try
            {
                MappedDiagnosticsContext.Set(mdcKey, mdcValue);
#if !NLOG_2
                MappedDiagnosticsLogicalContext.Set(mdclKey, mdclValue);
#endif
                logger.Error(messageTemplate, 123);
            }
            finally
            {
                MappedDiagnosticsContext.Remove(mdcKey);
#if !NLOG_2
                MappedDiagnosticsLogicalContext.Remove(mdclKey);
#endif
            }

            var logEvent = sink.Events.Should().ContainSingle().Subject;

            // get the rendered log
            var sb = new StringBuilder();
            logEvent.Format(sb, formatter);
            var log = sb.ToString();

            log.Should()
            .Contain("This is a message with 123")
            .And.Contain(mdcKey)
            .And.Contain(mdcValue)
#if !NLOG_2
            .And.Contain(mdclKey)
            .And.Contain(mdclValue)
#endif
            // .And.Contain(nestedScope)
            // .And.Contain(dictValues.Key)
            // .And.Contain(dictValues.Value.ToString())
            .And.Contain(DirectSubmissionLogLevelExtensions.Error);
        }