Dmi*_*hin 3 c# asp.net asp.net-mvc logging serilog
今天在工作中,我被要求在我现有的 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!");
Run Code Online (Sandbox Code Playgroud)
我希望在文件夹中看到一个新文件,但没有。我还尝试使用更简单的路径“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.
Run Code Online (Sandbox Code Playgroud)
然后 Serilog 应该登录到您期望的位置,如果该目录存在并且在那里具有写入权限。
从 Web 应用程序记录文件会变得非常混乱。除非您的站点几乎没有任何使用,否则日志将变得无法管理和无用。我建议您查看其他 Serilog 接收器,并找到一个记录到诸如Seq(来自 Serilog 的制造商)或Stackify Retrace 之类的日志记录服务的接收器。
| 归档时间: |
|
| 查看次数: |
5800 次 |
| 最近记录: |