using System; using System.Collections; using System.Collections.Generic; using Microsoft.Extensions.Logging; using UnityEngine; using ILogger = Microsoft.Extensions.Logging.ILogger; namespace BITKit { public abstract class UnityLogger:ILogger { [HideInCallstack] public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter) { switch (logLevel) { case LogLevel.Critical: case LogLevel.Error: if (exception is not null) { Debug.LogException(exception); } else { Debug.LogError($"{CurrentScope}:{state.ToString()}"); } break; default: Debug.Log($"{CurrentScope}:{state.ToString()}"); break; } } public bool IsEnabled(LogLevel logLevel) => true; private string CurrentScope { get; set; } public IDisposable BeginScope(TState state) where TState : notnull { CurrentScope = typeof(TState).Name; return null; } } public sealed class UnityLogger:ILogger { public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter) { switch (logLevel) { case LogLevel.Critical: case LogLevel.Error: if (exception is not null) { Debug.LogException(exception); } else { Debug.LogError($"{typeof(T).Name}:{state.ToString()}"); } break; default: Debug.Log($"{typeof(T).Name}:{state.ToString()}"); break; } } public bool IsEnabled(LogLevel logLevel) { return true; } public IDisposable BeginScope(TState state) where TState : notnull { return null; } } }