Serilog.Exceptions 滚动文件

Serilog.Exceptions Rolling Files

记录新异常时,会创建一个新文件。

场景: 创建的第一个文件:
log-20170602

每个异常创建的文件:
log-20170602_001
log-20170602_002
log-20170602_003

我的代码(C# - Visual Studio 2015 项目):

public class EventLogging
    {
        private readonly Logger _logger;


        public EventLogging(IOptions<LoggingOptions> logOption)
        {
            var logAccessor = logOption.Value;

            _logger = new LoggerConfiguration()
                .Enrich.WithExceptionDetails()
                .WriteTo.Sink(new RollingFileSink(logAccessor.Path,
                    new JsonFormatter(renderMessage: true), null, null)).CreateLogger();
        }

        public void LogError(string message, Exception exception)
        {
            _logger.Error(exception, message);
        }

        public void LogWarning(string message, Exception exception)
        {
            _logger.Warning(exception, message);
        }
    }

参考class,避免在每个class中写下面的代码:

_logger = new LoggerConfiguration()
                .Enrich.WithExceptionDetails()
                .WriteTo.Sink(new RollingFileSink(logAccessor.Path,
                    new JsonFormatter(renderMessage: true), null, null)).CreateLogger();

有没有办法阻止每个例外但每个新日期创建文件?

您是否在每次记录内容时都创建一个新的记录器?通常使用 Serilog 我初始化单例 Log 实例一次并在任何地方使用它:

启动时:

Serilog.Log.Logger = new LoggerConfiguration()
    .Enrich.WithExceptionDetails()
    .WriteTo.Sink(new RollingFileSink(logAccessor.Path,
    new JsonFormatter(renderMessage: true), null, null)).CreateLogger();

以后:

Serilog.Log.Error(exception, message);

对于您的情况,我认为如果您只保留 _logger 的静态实例而不是一遍又一遍地重新创建一个新实例,它将解决您的问题。或者,如果您只保留相同的 RollingFileSink 并重新使用它,您可以使用不同的记录器。