using UnityEngine; using Zenject; namespace DanroJump.Debugging { /// /// Регистрирует глобальный runtime-сервис отладочного вывода в ProjectContext. /// public sealed class RuntimeDebugInstaller : MonoInstaller { [SerializeField] private bool enabledOnStartup = true; [SerializeField] private DebugLogChannel enabledChannels = DebugLogChannel.All; [SerializeField] private DebugLogOutput enabledOutputs = DebugLogOutput.UnityConsole | DebugLogOutput.CustomHandlers; [Header("File Handler")] [SerializeField] private bool fileLoggingEnabled; [SerializeField] private bool fileLoggingUsePersistentDataPath = true; [SerializeField] private string fileLoggingDirectory = "Logs"; [SerializeField] private string fileLoggingFileName = "debug.log"; [SerializeField] private bool fileLoggingAppendToFile = true; [SerializeField] private bool fileLoggingWriteSessionHeader = true; [SerializeField] [Min(1)] private int fileLoggingFlushEveryEntries = 1; public override void InstallBindings() { var service = DebugLogService.GetOrCreate(); DebugLogOutput resolvedOutputs = fileLoggingEnabled ? enabledOutputs | DebugLogOutput.CustomHandlers : enabledOutputs; service.IsEnabled = enabledOnStartup; service.EnabledChannels = enabledChannels; service.EnabledOutputs = resolvedOutputs; Container.Bind().FromInstance(service).AsSingle(); if (fileLoggingEnabled) { Container.BindInterfacesAndSelfTo() .AsSingle() .WithArguments(CreateFileLogOptions()) .NonLazy(); } Container.BindInterfacesTo().AsSingle().NonLazy(); } private DebugFileLogOptions CreateFileLogOptions() { return new DebugFileLogOptions( fileLoggingEnabled, fileLoggingUsePersistentDataPath, fileLoggingDirectory, fileLoggingFileName, fileLoggingAppendToFile, fileLoggingWriteSessionHeader, fileLoggingFlushEveryEntries); } } }