2016-10-11 153 views
2

有没有办法从日志类中获取完整的文件名? 记录器创建一个格式为C:\MyPath\log-20160631.txt的文件Serilog:打开日志文件

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

编辑: 这里是记录器的初始化:

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

在代码我可以例如使用每个位置Log.Information()但我怎么得到接收器的信息?我想获取传递给滚动文件接收器的文件名。

我目前的解决方法是手动生成真正的文件(疯狂丑陋的代码):

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 Repo了。

+1

目前还不清楚你的意思是“我无法访问我用于记录器初始化的源文件名”。请发布您的serilog初始化代码,并明确说明您需要文件名的位置和原因。 – PatrickSteele

+0

我添加了示例代码和扩展描述以及当前的解决方法。 – Suplanus

+0

从浏览[通过代码](https://github.com/serilog/serilog-sinks-rollingfile/tree/dev/src/Serilog.Sinks.RollingFile/Sinks/RollingFile),我不认为这是可能的获取当前正在使用的文件名。我想另一个问题是为什么你需要它?也许还有另一种方法来做你不需要知道文件名就需要做的事情。 – PatrickSteele

回答

2

不,没有办法从Serilog中检索文件名。您的最佳可用选项是使用System.IO类来列出目录中的文件,然后打开包含最近修改日期的文件。