From 86eeae9a8be8706ceebc8512173e928ab4f76c7e Mon Sep 17 00:00:00 2001 From: Cinka Date: Mon, 5 May 2025 21:28:09 +0300 Subject: [PATCH] - fix: logger blocking some files --- Nebula.Launcher/App.axaml.cs | 2 + .../ViewModels/ServerEntryModelView.cs | 2 +- Nebula.Runner/Program.cs | 3 +- Nebula.Shared/Services/DebugService.cs | 44 ++++++++++++++++--- Nebula.sln.DotSettings.user | 2 + 5 files changed, 44 insertions(+), 9 deletions(-) diff --git a/Nebula.Launcher/App.axaml.cs b/Nebula.Launcher/App.axaml.cs index 47c203a..55d7c70 100644 --- a/Nebula.Launcher/App.axaml.cs +++ b/Nebula.Launcher/App.axaml.cs @@ -11,6 +11,7 @@ using Nebula.Launcher.MessageBox; using Nebula.Launcher.ViewModels.ContentView; using Nebula.Launcher.Views; using Nebula.Shared; +using Nebula.Shared.Services; namespace Nebula.Launcher; @@ -57,6 +58,7 @@ public class App : Application } else { + DebugService.DoFileLog = true; var services = new ServiceCollection(); services.AddAvaloniaServices(); services.AddServices(); diff --git a/Nebula.Launcher/ViewModels/ServerEntryModelView.cs b/Nebula.Launcher/ViewModels/ServerEntryModelView.cs index f654f65..8d79e41 100644 --- a/Nebula.Launcher/ViewModels/ServerEntryModelView.cs +++ b/Nebula.Launcher/ViewModels/ServerEntryModelView.cs @@ -216,7 +216,7 @@ public partial class ServerEntryModelView : ViewModelBase if (Process is null) return; - _processLogger = DebugService.GetLogger(buildInfo.BuildInfo.Build.Hash); + _processLogger = DebugService.GetLogger($"PROCESS_{Process.Id}"); Process.EnableRaisingEvents = true; diff --git a/Nebula.Runner/Program.cs b/Nebula.Runner/Program.cs index adac1a9..f27b07f 100644 --- a/Nebula.Runner/Program.cs +++ b/Nebula.Runner/Program.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.DependencyInjection; using Nebula.Shared; +using Nebula.Shared.Services; namespace Nebula.Runner; @@ -9,7 +10,7 @@ public static class Program { var services = new ServiceCollection(); services.AddServices(); - + var serviceProvider = services.BuildServiceProvider(); var task = serviceProvider.GetService()!.Run(args); task.Wait(); diff --git a/Nebula.Shared/Services/DebugService.cs b/Nebula.Shared/Services/DebugService.cs index 00a7186..aab8c79 100644 --- a/Nebula.Shared/Services/DebugService.cs +++ b/Nebula.Shared/Services/DebugService.cs @@ -8,11 +8,17 @@ namespace Nebula.Shared.Services; [ServiceRegister] public class DebugService : IDisposable { + public static bool DoFileLog; private ServiceLogger Root {get; set;} + + private readonly string _path = + Path.Combine(FileService.RootPath, "log", Assembly.GetEntryAssembly()?.GetName().Name ?? "App"); public DebugService() { - Root = new ServiceLogger("Root"); + ClearLog(); + Root = new ServiceLogger("Root",_path); + Root.GetLogger("DebugService").Log("Initializing debug service " + (DoFileLog ? "with file logging" : "without file logging")); } public ILogger GetLogger(string loggerName) @@ -29,6 +35,22 @@ public class DebugService : IDisposable { Root.Dispose(); } + + private void ClearLog() + { + if(!Directory.Exists(_path)) + return; + var di = new DirectoryInfo(_path); + + foreach (var file in di.GetFiles()) + { + file.Delete(); + } + foreach (var dir in di.GetDirectories()) + { + dir.Delete(true); + } + } } public enum LoggerCategory @@ -40,12 +62,15 @@ public enum LoggerCategory internal class ServiceLogger : ILogger { + private readonly string _directory; public ServiceLogger? Root { get; private set; } - public ServiceLogger(string category) + public ServiceLogger(string category, string directory) { + _directory = directory; Category = category; - var directory = Path.Combine(FileService.RootPath,"log", Assembly.GetEntryAssembly()?.GetName().Name ?? "App"); + if (!DebugService.DoFileLog) return; + if(!Directory.Exists(directory)) Directory.CreateDirectory(directory); _fileStream = File.Open(Path.Combine(directory,$"{Category}.log"), FileMode.Create, FileAccess.Write, FileShare.Read); @@ -64,7 +89,7 @@ internal class ServiceLogger : ILogger if (Childs.TryGetValue(category, out var logger)) return logger; - logger = new ServiceLogger(category); + logger = new ServiceLogger(category, _directory); logger.Root = this; Childs.Add(category, logger); return logger; @@ -72,8 +97,10 @@ internal class ServiceLogger : ILogger public void Log(LoggerCategory loggerCategory, string message) { - var output = - $"[{DateTime.Now.ToUniversalTime():yyyy-MM-dd HH:mm:ss}][{Enum.GetName(loggerCategory)}][{Category}]: {message}"; + var output = DebugService.DoFileLog + ? $"[{DateTime.Now.ToUniversalTime():yyyy-MM-dd HH:mm:ss}][{Enum.GetName(loggerCategory)}][{Category}]: {message}" + : message; + Console.WriteLine(output); LogToFile(output); @@ -81,6 +108,7 @@ internal class ServiceLogger : ILogger private void LogToFile(string output) { + if(!DebugService.DoFileLog) return; Root?.LogToFile(output); _streamWriter.WriteLine(output); _streamWriter.Flush(); @@ -88,8 +116,10 @@ internal class ServiceLogger : ILogger public void Dispose() { - _fileStream.Dispose(); + if (!DebugService.DoFileLog) return; + _streamWriter.Dispose(); + _fileStream.Dispose(); foreach (var (_, child) in Childs) { child.Dispose(); diff --git a/Nebula.sln.DotSettings.user b/Nebula.sln.DotSettings.user index ab59f99..d0524b3 100644 --- a/Nebula.sln.DotSettings.user +++ b/Nebula.sln.DotSettings.user @@ -9,9 +9,11 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded INFO \ No newline at end of file