2016-10-11 80 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類來列出目錄中的文件,然後打開包含最近修改日期的文件。