我正在使用Serilog作为我的程序的记录器。正在尝试生成将yyyymmdd日期附加到每个文件的滚动间隔文件。
下面的代码正是我一直使用的代码,它在4-5天的测试和开发我的UWP应用程序中起到了很好的作用。然后我想我的应用程序开始创建多个具有相同日期的文件,并将它们命名为日志-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成为静态的,从而使它具有通用性,要么需要一种方法使它只使用一个文件。任何帮助都将不胜感激
发布于 2019-06-13 03:58:56
更新:
由于滚动文件将被弃用,因此可以使用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();
除非大小变得太大,否则将默认为每日日志文件。
发布于 2021-06-19 17:14:56
也有同样的问题。在WriteTo.File()调用中添加共享参数为我解决了这个问题:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.File(@"C:\Logs\Log_.txt", shared: true, rollingInterval: RollingInterval.Day)
.CreateLogger();
https://stackoverflow.com/questions/56569362
复制相似问题