C# 为什么RollingInterval.Day不断创建新的Serilog文件?

C# 为什么RollingInterval.Day不断创建新的Serilog文件?,c#,xaml,uwp,serilog,C#,Xaml,Uwp,Serilog,我使用Serilog作为我程序的记录器。尝试创建将yyyymmdd日期附加到每个文件的滚动间隔文件 下面的代码正是我一直在使用的代码,它为我的UWP应用程序的进一步测试和开发工作了4-5天。然后我想我的应用程序开始创建多个日期相同的文件,标题为logs-yyyymmdd_01、logs-yyyymmdd_02等等 这在MainPageViewModel构造函数中 Log.Logger = new LoggerConfiguration().MinimumLevel.Deb

我使用Serilog作为我程序的记录器。尝试创建将yyyymmdd日期附加到每个文件的滚动间隔文件

下面的代码正是我一直在使用的代码,它为我的UWP应用程序的进一步测试和开发工作了4-5天。然后我想我的应用程序开始创建多个日期相同的文件,标题为logs-yyyymmdd_01、logs-yyyymmdd_02等等

这在MainPageViewModel构造函数中

            Log.Logger = new LoggerConfiguration().MinimumLevel.Debug()
            .WriteTo.File(this.GetFile("logs-"), rollingInterval: RollingInterval.Day)
            .CreateLogger();


我怀疑它多次调用构造函数,这可能是问题的一部分。但是滚动间隔应该只在新的一天创建新文件,对吗?因为当应用程序多次启动时,它会使用与今天日期对应的任何文件。因此,我需要一种方法使Log.Logger成为静态的,以便它是通用的,或者需要一种方法使它只使用一个文件。任何帮助都将不胜感激

更新:

由于滚动文件越来越不受欢迎,您可以使用Nuget中的
Serilog.Sinks.file
包来实现。滚动文件的语法为:

        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.Console()
            .WriteTo.File($@"{logPath}\log-.txt", rollingInterval: RollingInterval.Day)
            .CreateLogger();

您是否安装了NuGet的
Serilog.Sinks.RollingFile
?我的理解是,
Serilog.Sinks.file
的滚动文件方面仍然依赖于该依赖关系

话虽如此,我使用以下方法:

        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.Console()
            .WriteTo.RollingFile($@"{Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)}\Organization\{Path.GetFileNameWithoutExtension(Process.GetCurrentProcess().MainModule.FileName)}\Logs\log.txt")
            .CreateLogger();

默认为每日日志文件,除非大小过大

是的,我之前已经有Serilog.Sinks.File了,看起来RollingFile添加了您刚才介绍的语法。我试过了,我仍然在创建多个文件。如果我的构造函数运行多次,这种情况还会发生吗?在我的代码中是否有更好的地方来放置我的记录器构造函数以确保它只运行一次?正如BWhelan所说的@Greg,文件的滚动支持是。。。滚入并且不依赖于
.RollingFile
@rubenbarelink啊,我知道了,我把它读为Serilog.Sinks.File需要滚入文件。我的bad@BWhelan嗯,它不应该在构造函数中。您应该在入口点或抽象提供程序中包含该代码,该提供程序只构造一次。@Greg谢谢,我使用调用层次结构来确定我的MainViewModel构造函数在哪里被多次调用,从而解决了这个问题。感谢您以新的方式使用RollingFile语法!很确定它应该像你所希望的那样附加-也许它达到了大小限制?repo文件serilog.sinks中的代码非常干净-建议从中找出它(测试也很好地指定了各种行为)
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.Console()
            .WriteTo.RollingFile($@"{Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)}\Organization\{Path.GetFileNameWithoutExtension(Process.GetCurrentProcess().MainModule.FileName)}\Logs\log.txt")
            .CreateLogger();