为什么 RollingInterval.Day 不断创建新的 Serilog 日志文件?
Why does RollingInterval.Day keep creating new Serilog Logs files?
我正在使用 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 静态化以使其具有通用性,要么需要一种方法使其仅使用一个文件。任何帮助将不胜感激
更新:
由于滚动文件已被弃用,您可以使用 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();
除非大小变得太大,否则默认为每日日志文件。
有同样的问题。在 WriteTo.File() 调用中添加 shared 参数为我修复了它:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.File(@"C:\Logs\Log_.txt", shared: true, rollingInterval: RollingInterval.Day)
.CreateLogger();
我正在使用 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 静态化以使其具有通用性,要么需要一种方法使其仅使用一个文件。任何帮助将不胜感激
更新:
由于滚动文件已被弃用,您可以使用 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();
除非大小变得太大,否则默认为每日日志文件。
有同样的问题。在 WriteTo.File() 调用中添加 shared 参数为我修复了它:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.File(@"C:\Logs\Log_.txt", shared: true, rollingInterval: RollingInterval.Day)
.CreateLogger();