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

问题描述 投票:4回答:1

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

如何让它写入我的网络应用程序的内容根目录?

c# .net .net-core serilog
1个回答
3
投票

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

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

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

Environment.CurrentDirectory = AppContext.BaseDirectory;

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

Environment.SetEnvironmentVariable("BASEDIR", AppContext.BaseDirectory);

因此以下配置:

"%BASEDIR%\logs\log.txt"
© www.soinside.com 2019 - 2024. All rights reserved.