using Dalamud.Plugin.Services; using LightlessSync.LightlessConfiguration; using Microsoft.Extensions.Logging; using System.Collections.Concurrent; namespace LightlessSync.Interop; [ProviderAlias("Dalamud")] public sealed class DalamudLoggingProvider : ILoggerProvider { private readonly ConcurrentDictionary _loggers = new(StringComparer.OrdinalIgnoreCase); private readonly LightlessConfigService _lightlessConfigService; private readonly IPluginLog _pluginLog; private readonly bool _hasModifiedGameFiles; public DalamudLoggingProvider(LightlessConfigService lightlessConfigService, IPluginLog pluginLog, bool hasModifiedGameFiles) { _lightlessConfigService = lightlessConfigService; _pluginLog = pluginLog; _hasModifiedGameFiles = hasModifiedGameFiles; } public ILogger CreateLogger(string categoryName) { string catName = categoryName.Split(".", StringSplitOptions.RemoveEmptyEntries).Last(); if (catName.Length > 15) { catName = string.Join("", catName.Take(6)) + "..." + string.Join("", catName.TakeLast(6)); } else { catName = string.Join("", Enumerable.Range(0, 15 - catName.Length).Select(_ => " ")) + catName; } return _loggers.GetOrAdd(catName, name => new DalamudLogger(name, _lightlessConfigService, _pluginLog, _hasModifiedGameFiles)); } public void Dispose() { _loggers.Clear(); GC.SuppressFinalize(this); } }