Serilog:打开日志文件

7

如何从Log类中获取完整的文件名? 日志记录器创建的文件格式为C:\MyPath\log-20160631.txt

我无法访问用于初始化记录器的源文件名。

编辑: 以下是记录器的初始化:

Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.LiterateConsole()
            .WriteTo.RollingFile(@"C:\MyPath\log.txt")
            .CreateLogger();

在代码的任何位置,我都可以使用Log.Information(),但是如何获取Sink信息呢?我想要获取传递给滚动文件Sink的文件名。

我的当前解决方法是手动生成真实文件(非常丑陋的代码):

public string LogFilename
{
   get
   {
      string path = Path.GetDirectoryName(LogFilenameTemplate);
      string filenameWithoutExtension = Path.GetFileNameWithoutExtension(LogFilenameTemplate);
      string extension = Path.GetExtension(LogFilenameTemplate);
      string date = DateTime.Now.ToString("yyyyMMdd");
      string fullFilename = Path.Combine(path, filenameWithoutExtension + "-" + date + extension);
      return fullFilename;
   }
}

我从GitHub代码库获得的格式。


1
“我无法访问我用于记录器初始化的源文件名”这句话并不清楚。请发布您的Serilog初始化代码,并明确说明您何时以及为什么需要文件名。 - PatrickSteele
我添加了示例代码、扩展说明和当前的解决方法。 - Suplanus
从浏览代码来看,我认为目前无法获取正在使用的文件名。我猜另一个问题是为什么需要它?也许有其他方法可以在不知道文件名的情况下完成所需的操作。 - PatrickSteele
我将Logger传递给应用程序的另一部分(不是由我编写的)。需要在UI中打开日志文件。 因此,我应该通过丑陋的解决方法传递文件名 :)。 - Suplanus
1
如果您绝对需要使用文件系统来共享访问日志,请确保将“shared”标志设置为“true”。但是,依赖于文件名来共享日志数据可能会有更简单的方法。 - PatrickSteele
1个回答

9

不,无法从Serilog中检索文件名。您最好的选择是使用System.IO类列出目录中的文件,然后打开修改日期最近的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接