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); }
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()); }
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()); }
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 _)); }
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); } } }
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); } }
public void SetIsSafeWhenNoContextIsActive() { var dc = new DiagnosticContext(Some.Logger()); dc.Set(Some.String("name"), Some.Int32()); }