Serilog,一个文件接收器写入,一个留下空白文件

时间:2019-03-29 12:54:07

标签: serilog

所以我有一个简单的方法可以为我创建记录器实例。

如下

protected ILogger GetIndividualLogger(ILogger parentLogger, LogEventLevel minimumLevel, string RootDir, string Type, string Name, bool shouldBuffer, bool shouldBeShared, TimeSpan flushToDiskInterval)
{
    var LogAllFile = $"{RootDir}{Path.DirectorySeparatorChar}{Name}{Path.DirectorySeparatorChar}RAL-{Type}-{Name}-.log";
    var LogWarningFile = $"{RootDir}{Path.DirectorySeparatorChar}{Name}{Path.DirectorySeparatorChar}Warnings{Path.DirectorySeparatorChar}RAL-{Type}-{Name}-.log";

    ILogger logger = new LoggerConfiguration()
        .MinimumLevel.Is(minimumLevel)
        .Enrich.WithDemystifiedStackTraces()
        .WriteTo.Async(a => a.Logger(parentLogger))
        .WriteTo.Async(a => a.File(LogAllFile, outputTemplate: SerilogHereHelper.TemplateForHere, rollingInterval: RollingInterval.Day, buffered: shouldBuffer, shared: shouldBeShared))
        .WriteTo.Async(a => a.File(LogWarningFile, restrictedToMinimumLevel: LogEventLevel.Warning, outputTemplate: SerilogHereHelper.TemplateForHere, rollingInterval: RollingInterval.Day, buffered: shouldBuffer, shared: shouldBeShared, flushToDiskInterval: flushToDiskInterval))
        .CreateLogger();
    return logger;
}

以下是对GetIndividualLogger的示例调用

GetIndividualLogger(parentLogger: mainLogger, minimumLevel: LogEventLevel.Information, RootDir: _stackLightLogPath, Type: "Stack Light", Name: "Stack Light 1", shouldBuffer: true, shouldBeShared: false, flushToDiskInterval: TimeSpan.FromSecond(2))

警告级别接收器将写入,但随后通常设置为调试或信息的另一个接收器将创建一个空文件,但从不向其中添加任何条目。

我希望两个文件具有所有警告级别条目或更高。 我希望“ LogAllFile”具有等于或高于最低级别的所有条目,但是它为空。

我的记录器配置有问题吗?还是我的问题在别处?

1 个答案:

答案 0 :(得分:0)

所以问题的答案很愚蠢。警告日志每2秒被刷新到磁盘上一次,但是主日志文件不是这样,所以我需要做的只是在flushToDiskInterval中传递一个值

.WriteTo.Async(a => a.File(LogAllFile, outputTemplate: SerilogHereHelper.TemplateForHere, rollingInterval: RollingInterval.Day, buffered: shouldBuffer, shared: shouldBeShared, flushToDiskInterval: flushToDiskInterval))