如何让 Serilog 从 appsettings.json 登录到 web 输出目录?

Ang*_*ker 4 .net c# serilog .net-core

我使用 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'。

我怎样才能让它写入我的网络应用程序的内容根目录?

Nic*_*rdt 10

理想情况下,您希望将日志文件写入 Web 应用程序的内容根目录,因为这些文件最终可以通过 Web 访问,这将是一个严重的安全问题。

日志文件路径配置可以包含环境变量,因此类似%TMP%\log.txt,或基于%LOCALAPPDATA%等的路径是一个不错的选择(只要网站的工作进程有权写入该位置)。

您可以通过在设置记录器之前更改当前目录来写入相对于您的 Web 应用程序的路径:

Environment.CurrentDirectory = AppContext.BaseDirectory;
Run Code Online (Sandbox Code Playgroud)

或者,您可以结合这些方法并设置您自己的环境变量来执行此操作:

Environment.SetEnvironmentVariable("BASEDIR", AppContext.BaseDirectory);
Run Code Online (Sandbox Code Playgroud)

因此,以下配置:

"%BASEDIR%\logs\log.txt"
Run Code Online (Sandbox Code Playgroud)