【问题标题】:Using Serilog in ASP.NET MVC project在 ASP.NET MVC 项目中使用 Serilog
【发布时间】:2019-06-21 14:34:29
【问题描述】:

今天在工作中,我被要求在我现有的 ASP.NET MVC(非核心)项目中添加一些基本的日志记录功能。有人告诉我为此使用 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?如果是,将某些内容记录到文本文件中的简单方法是什么?

【问题讨论】:

    标签: c# asp.net asp.net-mvc logging serilog


    【解决方案1】:

    我怀疑 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      相关资源
      最近更新 更多