我使用Visual Studio和集成的Serilog创建了一个新的.NET Core Web项目。它从appsettings.json(通过.UseSerilog((ctx, config) => { config.ReadFrom.Configuration(ctx.Configuration); })
)读取设置。
在appsettings.json中,写入日志的路径在Serilog/WriteTo/Args/pathFormat
中指定。如果我将该值设置为log.txt
,它将尝试将该文件写入`c:\ program files \ iisexpress \ log.txt'。
如何让它写入我的网络应用程序的内容根目录?
理想情况下,您不希望将日志文件写入Web应用程序的内容根目录,因为这些文件最终可以通过Web访问,这将是一个严重的安全考虑因素。
日志文件路径配置可以包含环境变量,因此像%TMP%\log.txt
或基于%LOCALAPPDATA%
等的路径是一个不错的选择(只要网站的工作进程有权写入该位置)。
在设置记录器之前,您可以通过更改当前目录来写入与Web应用程序相关的路径:
Environment.CurrentDirectory = AppContext.BaseDirectory;
或者,您可以组合这些方法并设置自己的环境变量来执行此操作:
Environment.SetEnvironmentVariable("BASEDIR", AppContext.BaseDirectory);
因此以下配置:
"%BASEDIR%\logs\log.txt"