diff --git a/src/Recyclarr/Logging/DelayedFileSink.cs b/src/Recyclarr/Logging/DelayedFileSink.cs index 853ededa..25fb0764 100644 --- a/src/Recyclarr/Logging/DelayedFileSink.cs +++ b/src/Recyclarr/Logging/DelayedFileSink.cs @@ -1,13 +1,16 @@ using System.IO.Abstractions; using Serilog.Events; +using Serilog.Formatting; +using Serilog.Formatting.Display; using TrashLib; namespace Recyclarr.Logging; -public class DelayedFileSink : IDelayedFileSink +public sealed class DelayedFileSink : IDelayedFileSink { private readonly IAppPaths _paths; private readonly Lazy _stream; + private ITextFormatter? _formatter; public DelayedFileSink(IAppPaths paths, IFileSystem fs) { @@ -26,7 +29,8 @@ public class DelayedFileSink : IDelayedFileSink return; } - _stream.Value.WriteLine(logEvent.RenderMessage()); + _formatter?.Format(logEvent, _stream.Value); + _stream.Value.Flush(); } public void Dispose() @@ -36,4 +40,9 @@ public class DelayedFileSink : IDelayedFileSink _stream.Value.Close(); } } + + public void SetTemplate(string template) + { + _formatter = new MessageTemplateTextFormatter(template); + } } diff --git a/src/Recyclarr/Logging/IDelayedFileSink.cs b/src/Recyclarr/Logging/IDelayedFileSink.cs index 8d3345e7..7a9893fe 100644 --- a/src/Recyclarr/Logging/IDelayedFileSink.cs +++ b/src/Recyclarr/Logging/IDelayedFileSink.cs @@ -4,4 +4,5 @@ namespace Recyclarr.Logging; public interface IDelayedFileSink : ILogEventSink, IDisposable { + void SetTemplate(string template); } diff --git a/src/Recyclarr/Logging/LoggerFactory.cs b/src/Recyclarr/Logging/LoggerFactory.cs index 71a5133a..995eac38 100644 --- a/src/Recyclarr/Logging/LoggerFactory.cs +++ b/src/Recyclarr/Logging/LoggerFactory.cs @@ -5,23 +5,26 @@ namespace Recyclarr.Logging; public class LoggerFactory { + private const string ConsoleTemplate = "[{Level:u3}] {Message:lj}{NewLine}{Exception}"; + private readonly LoggingLevelSwitch _logLevel; - private readonly IDelayedFileSink _fileSink; + private readonly Func _fileSinkFactory; - public LoggerFactory(LoggingLevelSwitch logLevel, IDelayedFileSink fileSink) + public LoggerFactory(LoggingLevelSwitch logLevel, Func fileSinkFactory) { _logLevel = logLevel; - _fileSink = fileSink; + _fileSinkFactory = fileSinkFactory; } public ILogger Create() { - const string consoleTemplate = "[{Level:u3}] {Message:lj}{NewLine}{Exception}"; + var fileSink = _fileSinkFactory(); + fileSink.SetTemplate(ConsoleTemplate); return new LoggerConfiguration() .MinimumLevel.Debug() - .WriteTo.Console(outputTemplate: consoleTemplate, levelSwitch: _logLevel) - .WriteTo.Sink(_fileSink) + .WriteTo.Console(outputTemplate: ConsoleTemplate, levelSwitch: _logLevel) + .WriteTo.Sink(fileSink) .CreateLogger(); } }