为什么 RollingInterval.Day 不断创建新的 Serilog 日志文件



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

下面的代码正是我一直以来使用的代码,它花了 4-5 天的时间进一步测试和开发我的 UWP 应用。然后我认为我的应用程序开始创建多个文件,具有相同的日期,标题为日志yyyymmdd_01,日志yyyymmdd_02等。

这是在主页视图模型构造函数中

            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 静态,以便它是通用的,要么需要一种方法让它只使用一个文件。任何帮助将不胜感激

更新:

由于滚动文件已弃用,因此可以使用 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)}Logslog.txt")
            .CreateLogger();

这默认为每日日志文件,除非大小变得太大。

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

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

最新更新