Esempio n. 1
0
        public void ExistingPropertiesCanBeUpdated()
        {
            var dc = new DiagnosticContext(Some.Logger());

            var collector = dc.BeginCollection();

            dc.Set("name", 10);
            dc.Set("name", 20);

            Assert.True(collector.TryComplete(out var properties));
            var prop   = Assert.Single(properties);
            var scalar = Assert.IsType <ScalarValue>(prop.Value);

            Assert.Equal(20, scalar.Value);
        }
Esempio n. 2
0
        public IActionResult Index([FromQuery] string name)
        {
            Logger.LogInformation("Hello, {Name} .. !!!!", name);

            DiagnosticContext.Set("IndexCallCount", Interlocked.Increment(ref _callCount));

            return(View());
        }
        public IActionResult Index([FromQuery] string name = "SinjulMSBH")
        {
            Logger.LogInformation("Hello, {Name} .. !!!!", name);

            DiagnosticContext.Set("IndexCallCount", Interlocked.Increment(ref _callCount));

            IEnumerable <ILoggerProvider> providers = LoggerProviderCollection.Providers;

            return(View());
        }
Esempio n. 4
0
        public ViewResult Index([FromQuery] string name = "SinjulMSBH")
        {
            Logger.LogInformation("Hello, {Name} .. !!!!", name);

            DiagnosticContext.Set("IndexCallCount", Interlocked.Increment(ref _callCount));

            IEnumerable <ILoggerProvider> providers = LoggerProvider.Providers;

            ShoppingCartService.AddItem("SinjulMSBH", 130);

            return(View());
        }
        public ViewResult Index([FromQuery] string name = "SinjulMSBH")
        {
            Logger.LogInformation("Hello, {Name} .. !!!!", name);

            DiagnosticContext.Set("IndexCallCount", Interlocked.Increment(ref _callCount));

            IEnumerable <ILoggerProvider> providers = new LoggerProviderCollection().Providers;

            Log.ForContext <ShoppingCartService>().Information("Adding {ItemId} x {Quantity} to cart", itemId, quantity);

            return(View());
        }
Esempio n. 6
0
        public async Task PropertiesAreCollectedInAnActiveContext()
        {
            var dc = new DiagnosticContext(Some.Logger());

            var collector = dc.BeginCollection();

            dc.Set(Some.String("first"), Some.Int32());
            await Task.Delay(TimeSpan.FromMilliseconds(10));

            dc.Set(Some.String("second"), Some.Int32());

            Assert.True(collector.TryComplete(out var properties));
            Assert.Equal(2, properties.Count());

            Assert.False(collector.TryComplete(out _));

            collector.Dispose();

            dc.Set(Some.String("third"), Some.Int32());
            Assert.False(collector.TryComplete(out _));
        }
Esempio n. 7
0
        public void Index([FromQuery] string name = "SinjulMSBH")
        {
            Logger.LogInformation("Logger: LogInformation");
            Logger.LogWarning("Logger: LogWarning");
            Logger.LogError("Logger: LogError");
            Logger.LogCritical("Logger: LogCritical");

            Logger.LogInformation("Hello, {Name} .. !!!!", name);

            DiagnosticContext.Set("IndexCallCount", Interlocked.Increment(ref _callCount));

            IEnumerable <ILoggerProvider> providers = LoggerProvider.Providers;

            ShoppingCartService.AddItem("SinjulMSBH", 130);

            throw new Exception("SinjulMBSH");
        }
        /// <summary>
        /// Writes the values supplied to the IDiagnosticContext for this request.
        /// </summary>
        /// <param name="values"></param>
        protected virtual void WriteToDiagnosticsContext(IDictionary <string, object> values)
        {
            if (values == null)
            {
                throw new ArgumentNullException(nameof(values));
            }

            foreach (var value in values)
            {
                if (value.Key != null && value.Value != null)
                {
                    Logger.LogDebug("Logging to IDiagnosticContext: {name} {value}", value.Key, value.Value);
                    DiagnosticContext.Set(value.Key, value.Value);
                }
                else
                {
                    Logger.LogDebug(
                        "Not Logging to IDiagnosticContext as key and/or value are null, {name} {value}",
                        value.Key ?? string.Empty,
                        value.Value ?? string.Empty);
                }
            }
        }
Esempio n. 9
0
        private void PerformLog(LogEntry logEntry)
        {
            if (DiagnosticContext == null || SerilogLogger == null)
            {
                throw new InvalidOperationException($"Configure asp.net core & serilog using https://github.com/serilog/serilog-aspnetcore");
            }

            bool isRequestLogEntry = false;

            if (logEntry.LogData.Any(ld => ld.Key == nameof(IRequestInformationProvider.DisplayUrl)) && HttpContextAccessor.HttpContext != null)
            {
                isRequestLogEntry = true;

                HttpContext httpContext = HttpContextAccessor.HttpContext;

                IUserInformationProvider userInformationProvider = httpContext.RequestServices.GetRequiredService <IUserInformationProvider>();
            }

            var keyValues = logEntry.LogData.Select(ld =>
            {
                string k = ld.Key;

                if (k == nameof(IRequestInformationProvider.HttpMethod) ||
                    k == nameof(IRequestInformationProvider.DisplayUrl) ||
                    k == "ResponseStatusCode" ||
                    ld.Value == null)
                {
                    return(Key: null, Value: null);  // Already being logged by serilog!
                }
                string v = null;

                if (ld.Value is string valueAsStr)
                {
                    v = valueAsStr;
                }

                if (k == "ClientLogs" || k == "OperationArgs")
                {
                    v = Formatter.Serialize(ld.Value);
                }
                else
                {
                    v = ld.Value.ToString();
                }

                return(Key: k, Value: v);
            })
                            .Where(d => d.Key != null)
                            .ToList();

            keyValues.Add((Key: nameof(LogEntry.MemoryUsage), Value: logEntry.MemoryUsage.ToString()));

            if (logEntry.AppServerDateTime.HasValue)
            {
                keyValues.Add((Key: nameof(LogEntry.AppServerDateTime), Value: logEntry.AppServerDateTime.ToString()));
            }

            keyValues.Add((Key: nameof(LogEntry.Severity), Value: logEntry.Severity));
            keyValues.Add((Key: nameof(LogEntry.Message), Value: logEntry.Message));

            if (logEntry.Id.HasValue)
            {
                keyValues.Add((Key: nameof(LogEntry.Id), Value: logEntry.Id.ToString()));
            }

            if (logEntry.AppServerThreadId.HasValue)
            {
                keyValues.Add((Key: nameof(LogEntry.AppServerThreadId), Value: logEntry.AppServerThreadId.ToString()));
            }

            foreach (var(Key, Value) in keyValues.OrderBy(kv => kv.Key))
            {
                DiagnosticContext.Set(Key, Value);
            }

            if (isRequestLogEntry == true)
            {
                LogData userAgent = logEntry.LogData.FirstOrDefault(ld => ld.Key == nameof(IRequestInformationProvider.UserAgent));

                if (userAgent != null)
                {
                    DiagnosticContext.Set("UserAgent", userAgent.Value);
                }
            }
            else
            {
                Exception ex = null;

                try
                {
                    var(Key, Value) = keyValues.ExtendedSingleOrDefault("Finding ExceptionTypeAssemblyQualifiedName...", kv => kv.Key == "ExceptionTypeAssemblyQualifiedName");

                    if (!string.IsNullOrEmpty(Value))
                    {
                        ex = (Exception)Activator.CreateInstance(Type.GetType(Value) ?? throw new InvalidOperationException($"{Value} could not be found"), args: new object[] { logEntry.Message });
                    }
                }
                catch { }

                LogEventLevel level = logEntry.Severity switch
                {
                    "Information" => LogEventLevel.Information,
                    "Warning" => LogEventLevel.Warning,
                    "Error" => LogEventLevel.Error,
                    "Fatal" => LogEventLevel.Fatal,
                    _ => LogEventLevel.Debug,
                };

                SerilogLogger.Write(level, ex?.Message ?? logEntry.Message);
            }
        }
Esempio n. 10
0
        public void SetIsSafeWhenNoContextIsActive()
        {
            var dc = new DiagnosticContext(Some.Logger());

            dc.Set(Some.String("name"), Some.Int32());
        }