You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让ASP.NET Core 9 Web API的ILogger日志存储在IIS指定目录

解决方案

1. 安装文件日志提供器

ASP.NET Core 默认不包含文件日志功能,需要先安装官方的文件日志 NuGet 包:

Install-Package Microsoft.Extensions.Logging.File

或者使用 .NET CLI:

dotnet add package Microsoft.Extensions.Logging.File

2. 在 Program.cs 中配置日志写入文件

2.1 注册文件日志提供器

在构建 WebApplication 之前,添加文件日志配置,优先读取 IIS 传递的日志路径(同时保留本地默认路径兜底):

var builder = WebApplication.CreateBuilder(args);

// 配置文件日志
builder.Logging.AddFile(options =>
{
    // 按日期分割日志文件名
    options.FileName = "api-logs-{Date}.txt";
    // 优先读取 IIS 设置的环境变量路径,否则用应用目录下的 Logs 文件夹
    options.LogDirectory = Environment.GetEnvironmentVariable("IIS_APP_LOG_PATH") 
        ?? Path.Combine(AppContext.BaseDirectory, "Logs");
    // 以追加模式写入日志
    options.Append = true;
    // 保留最近30天的日志文件
    options.RetainedFileCountLimit = 30;
    // 仅记录 Error 及以上级别的日志(可根据需求调整)
    options.MinLevel = LogLevel.Error;
});

// 注册全局异常处理器
builder.Services.AddExceptionHandler<GlobalExceptionHandler>();
builder.Services.AddProblemDetails();

// 其他服务注册(如控制器)
builder.Services.AddControllers();

var app = builder.Build();

// 启用异常处理中间件
app.UseExceptionHandler();

// 其他中间件配置
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

2.2 注册全局异常处理器

确保已在 Program.cs 中完成 GlobalExceptionHandler 的注册,并启用异常处理中间件(上述代码已包含该逻辑)。

3. 指定 IIS 中的日志文件路径

推荐方式:通过 IIS 传递环境变量(无需修改应用配置)

这种方式能让应用日志路径与 IIS 配置保持一致,且无需硬编码路径:

  1. 打开 IIS 管理器,找到目标站点,右键选择 配置编辑器
  2. 在 节 下拉菜单中选择 system.webServer/aspNetCore
  3. 找到 environmentVariables 项,点击右侧省略号按钮
  4. 添加新环境变量:
    • 名称:IIS_APP_LOG_PATH
    • 值:你在 IIS 中设置的特定日志文件夹路径(例如 D:\IISLogs\MyApi)
  5. 点击确定,重启站点即可生效

备选方式:手动在 appsettings.json 中配置路径

如果不想用环境变量,可直接在配置文件中指定路径:

{
  "Logging": {
    "File": {
      "LogDirectory": "D:\\IISLogs\\MyApi",
      "FileName": "api-logs-{Date}.txt",
      "MinLevel": "Error"
    },
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  }
}

然后在 Program.cs 中读取该配置:

builder.Logging.AddFile(builder.Configuration.GetSection("Logging:File"));

关键说明

  • 你的 GlobalExceptionHandler 已基于 ILogger 实现,只要配置了正确的日志提供器,日志会自动写入指定路径,无需修改异常处理器代码。
  • 使用 IIS 环境变量的方式更灵活:当你在 IIS 中修改日志路径时,应用无需重新部署或修改配置,直接生效。
  • 务必确保应用程序池的身份账号具有目标日志文件夹的写入权限,否则日志无法正常写入。

内容的提问来源于stack exchange,提问作者Qiuzman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:23:11