using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using NLog; using StabilityMatrix.Avalonia.Diagnostics.LogViewer.Core.Logging; using StabilityMatrix.Avalonia.Diagnostics.LogViewer.Core.ViewModels; using LogDataStore = StabilityMatrix.Avalonia.Diagnostics.LogViewer.Logging.LogDataStore; using MsLogLevel = Microsoft.Extensions.Logging.LogLevel; namespace StabilityMatrix.Avalonia.Diagnostics.LogViewer.Extensions; [SuppressMessage("ReSharper", "MemberCanBePrivate.Global")] public static class ServicesExtension { public static IServiceCollection AddLogViewer(this IServiceCollection services) { services.AddSingleton(); services.AddSingleton(); return services; } public static IServiceCollection AddLogViewer( this IServiceCollection services, Action configure) { services.AddSingleton(Core.Logging.LogDataStore.Instance); services.AddSingleton(); services.Configure(configure); return services; } public static ILoggingBuilder AddNLogTargets(this ILoggingBuilder builder, IConfiguration config) { LogManager .Setup() // Register custom Target .SetupExtensions(extensionBuilder => extensionBuilder.RegisterTarget("DataStoreLogger")); /*builder .ClearProviders() .SetMinimumLevel(MsLogLevel.Trace) // Load NLog settings from appsettings*.json .AddNLog(config, // custom options for capturing the EventId information new NLogProviderOptions { // https://nlog-project.org/2021/08/25/nlog-5-0-preview1-ready.html#nlogextensionslogging-changes-capture-of-eventid IgnoreEmptyEventId = false, CaptureEventId = EventIdCaptureType.Legacy });*/ return builder; } public static ILoggingBuilder AddNLogTargets(this ILoggingBuilder builder, IConfiguration config, Action configure) { builder.AddNLogTargets(config); builder.Services.Configure(configure); return builder; } }