为什么RollingInterval.Day继续创建新的Serilog日志文件?

时间:2019-06-12 19:43:33

标签: c# xaml uwp serilog

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

下面的代码正是我一直使用的代码,它在4-5天的测试和进一步开发我的UWP应用中工作了很长时间。然后我认为我的应用程序开始在同一日期创建多个文件,将它们分别命名为logs-yyyymmdd_01,logs-yyyymmdd_02等。

这在MainPageViewModel构造函数中

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

        public string GetFile(String FileName)
        {
            string s = ApplicationData.Current.LocalFolder.Path;
            return s + "\\" + FileName;
        }

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

2 个答案:

答案 0 :(得分:1)

您是否已从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();

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

答案 1 :(得分:0)

有同样的问题。在 WriteTo.File() 调用中添加 shared 参数为我修复了它:

Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.File(@"C:\Logs\Log_.txt", shared: true, rollingInterval: RollingInterval.Day)
            .CreateLogger();