ASP.NET Owin(.NET Framework4.8)项目中Serilog无法创建日志文件求助
问题解决建议
- 修正日志文件路径写法
ASP.NET Framework运行时的默认工作目录为IIS/IIS Express的运行目录,直接写相对路径log.txt无法定位到你预期的项目站点目录,也大概率没有写入权限。需要使用ASP.NET提供的站点路径映射方法获取绝对路径,引入System.Web命名空间后修改配置代码:
.WriteTo.File(System.Web.Hosting.HostingEnvironment.MapPath("~/log.txt"))
其中~/代表站点根目录,生成的日志文件会放在你站点的根路径下。
- 调整日志实例销毁逻辑
你当前在日志初始化方法写完测试日志后直接调用了Log.CloseAndFlush(),会直接销毁全局日志实例,不仅后续业务代码无法再写入日志,也可能出现日志还没完成写入就被强制销毁的问题。
需要把Log.CloseAndFlush()移动到Global.asax的Application_End事件中,仅在应用程序关闭时才销毁日志实例:
// Global.asax.cs protected void Application_End(object sender, EventArgs e) { Log.CloseAndFlush(); }
配置目录写入权限
站点运行身份(本地调试时为当前Windows用户,服务器部署时为IIS应用程序池对应的身份,默认为IIS_IUSRS)需要拥有日志存放目录的写入、修改权限,右键点击站点根目录,在安全选项卡中给对应身份添加对应权限即可。开启有效的Serilog自诊断日志
你代码中的自诊断日志配置是注释状态,且ASP.NET Framework下Console.WriteLine的输出不会显示在调试窗口,修改自诊断配置输出到VS调试窗口即可排查内部报错:
Serilog.Debugging.SelfLog.Enable(msg => System.Diagnostics.Debug.WriteLine(msg));
- 检查包版本兼容性
确认你安装的Serilog.Sinks.File版本兼容.NET Framework 4.8,优先选择5.x及以下的稳定版本,过高的版本可能仅支持.NET Core/.NET 5+,在Framework环境下会出现无报错但不工作的问题。
内容的提问来源于stack exchange,提问作者urmat abdykerimov
相关产品推荐
相关产品推荐

