using Dalamud.Plugin.Services; using MareSynchronos.MareConfiguration; using Microsoft.Extensions.Logging; using System.Collections.Concurrent; namespace MareSynchronos.Interop; [ProviderAlias("Dalamud")] public sealed class DalamudLoggingProvider : ILoggerProvider { private readonly ConcurrentDictionary _loggers = new(StringComparer.OrdinalIgnoreCase); private readonly MareConfigService _mareConfigService; private readonly IPluginLog _pluginLog; public DalamudLoggingProvider(MareConfigService mareConfigService, IPluginLog pluginLog) { _mareConfigService = mareConfigService; _pluginLog = pluginLog; } 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, _mareConfigService, _pluginLog)); } public void Dispose() { _loggers.Clear(); GC.SuppressFinalize(this); } }