diff --git a/src/NATS.Server.Host/Program.cs b/src/NATS.Server.Host/Program.cs index f0d614c..3febf15 100644 --- a/src/NATS.Server.Host/Program.cs +++ b/src/NATS.Server.Host/Program.cs @@ -139,6 +139,14 @@ using var server = new NatsServer(options, loggerFactory); // Register signal handlers server.HandleSignals(); +server.ReOpenLogFile = () => +{ + Log.Information("Reopening log file"); + Log.CloseAndFlush(); + Log.Logger = logConfig.CreateLogger(); + Log.Information("File log re-opened"); +}; + // Ctrl+C triggers graceful shutdown Console.CancelKeyPress += (_, e) => { diff --git a/src/NATS.Server/NatsServer.cs b/src/NATS.Server/NatsServer.cs index 7bd3e76..c80fa74 100644 --- a/src/NATS.Server/NatsServer.cs +++ b/src/NATS.Server/NatsServer.cs @@ -61,6 +61,7 @@ public sealed class NatsServer : IMessageRouter, ISubListAccess, IDisposable public string ServerNKey { get; } public bool IsShuttingDown => Volatile.Read(ref _shutdown) != 0; public bool IsLameDuckMode => Volatile.Read(ref _lameDuck) != 0; + public Action? ReOpenLogFile { get; set; } public IEnumerable GetClients() => _clients.Values; public Task WaitForReadyAsync() => _listeningStarted.Task; @@ -192,7 +193,7 @@ public sealed class NatsServer : IMessageRouter, ISubListAccess, IDisposable /// /// Registers Unix signal handlers. - /// SIGTERM → shutdown, SIGUSR2 → lame duck, SIGUSR1 → log reopen (stub), SIGHUP → reload (stub). + /// SIGTERM → shutdown, SIGUSR2 → lame duck, SIGUSR1 → log reopen, SIGHUP → reload (stub). /// public void HandleSignals() { @@ -222,7 +223,8 @@ public sealed class NatsServer : IMessageRouter, ISubListAccess, IDisposable _signalRegistrations.Add(PosixSignalRegistration.Create((PosixSignal)10, ctx => { ctx.Cancel = true; - _logger.LogWarning("Trapped SIGUSR1 signal — log reopen not yet supported"); + _logger.LogInformation("Trapped SIGUSR1 signal — reopening log file"); + ReOpenLogFile?.Invoke(); })); _signalRegistrations.Add(PosixSignalRegistration.Create((PosixSignal)12, ctx =>