using System.Threading.Tasks; using Managers; using Serilog; using UnityEngine; using Utils; using SerilogLogger = Serilog.Core.Logger; namespace Logging { public class UnityLogger : Singleton, ILaunchManager { private readonly SerilogLogger _logger = new LoggerConfiguration() .WriteTo.File("Logs/UnityLog.txt") .CreateLogger(); private bool _initialized; public Task Init() { if (_initialized) return Task.CompletedTask; Application.logMessageReceivedThreaded += OnLogMessageReceived; _initialized = true; Completed = true; return Task.CompletedTask; } public void Clear() { } public bool Completed { get; set; } public string StepDescription => "初始化日志"; private void OnLogMessageReceived(string logString, string stackTrace, LogType type) { switch (type) { case LogType.Assert: { _logger.Warning("\nContent: {0}", logString); break; } case LogType.Log: { _logger.Information("\nContent: {0}", logString); break; } case LogType.Warning: { _logger.Warning("\nContent: {0}", logString); break; } case LogType.Error: { _logger.Error("\nContent: {0}\nStackTrace:\n{1}", logString, stackTrace[..^1]); break; } case LogType.Exception: { _logger.Fatal("\nContent: {0}\nStackTrace:\n{1}", logString, stackTrace[..^1]); break; } default: { _logger.Information("\nContent: {0}", logString); break; } } } } }