簡體   English   中英

在ASP.NET MVC項目中使用Serilog

[英]Using Serilog in ASP.NET MVC project

今天,我被要求在我現有的ASP.NET MVC(不是Core)項目中添加一些基本的日志記錄功能。 有人告訴我為此使用Serilog。

但是,我找不到在MVC中使用Serilog的任何合理示例,所有鏈接僅引用Core。 我試圖自己做所有事情。 安裝所有必需的軟件包(Serilog,Serilog.Sinks.File)之后,我創建了一個“ Logs”文件夾並嘗試了以下操作:

var log = new LoggerConfiguration()
  .WriteTo.File("~/Logs/log.txt")
  .CreateLogger();

log.Information("Hello from Serilog!");

我希望在文件夾中看到一個新文件,但沒有任何文件。 我還嘗試使用更簡單的路徑“ log.txt”並搶先在此文件夾中創建文件,但這沒有幫助。

MVC是否完全不支持Serilog? 如果是的話,將某些內容記錄到文本文件中的簡單方法是什么?

我懷疑Serilog可以理解日志文件路徑中的~/語法。 ~/站點的虛擬根目錄,但是Serilog對虛擬根目錄或網站一無所知。 它只是一個日志記錄框架,需要正常路徑。 因此,如果要登錄到站點的Logs目錄中名為log.txt的文件,則需要將其轉換為Serilog可以理解的正確路徑。

System.Web.Hosting.HostingEnvironment.MapPath方法可以轉換虛擬根相對路徑。 因此~/Logs/log.txt可以變成類似C:\\path-to-your-site\\Logs\\log.txt

更改為此:

var log = new LoggerConfiguration()
    .WriteTo.File(System.Web.Hosting.HostingEnvironment.MapPath("~/Logs/log.txt"))
    .CreateLogger();

log.Information("Hello from Serilog!");    

//note that importing the namespace will make it so you don't have to fully qualify the name.

然后,如果該目錄存在並且在那里具有寫權限,則Serilog應該登錄到您期望的位置。

從Web應用程序記錄文件將變得非常混亂。 除非您的站點幾乎沒有使用任何方法,否則日志將變得難以管理且無用。 我建議您查看其他Serilog接收器,並找到一個記錄到日志記錄服務的記錄,例如Seq (來自Serilog的制造商)或Stackify Retrace

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM