ASP.NET Core WebAPI部署IIS后Serilog无法生成日志文件
ASP.NET Core部署IIS后Serilog无法写日志的解决办法
本地Visual Studio运行时日志正常生成,但部署到IIS后日志无法写入,通常是以下几个原因导致,对应解决方案如下:
1. IIS应用池账户权限不足
这是最常见的问题,IIS应用池的运行账户没有日志文件夹的读写权限:
- 找到站点部署后的根目录,手动创建
logs文件夹(如果还没生成) - 右键
logs文件夹 → 属性 → 安全 → 编辑 → 添加 - 输入
IIS AppPool\[你的应用池名称](比如你的应用池叫YeltApi,就填IIS AppPool\YeltApi),点击「检查名称」确认账户存在后添加 - 给该账户分配写入、修改、读取和执行、列出文件夹内容、读取权限,保存设置
2. 相对路径导致日志路径错误
Serilog配置里的相对路径在IIS环境下可能指向非站点目录,需要改用绝对路径:
修改Program.cs中的Serilog配置代码:
builder.Host.UseSerilog((hostContext, services, configuration) => { configuration.WriteTo.Console(); // 基于站点根目录生成日志绝对路径 var logFilePath = Path.Combine( hostContext.HostingEnvironment.ContentRootPath, "logs", "Middletier-.log" ); configuration.WriteTo.File(logFilePath, rollingInterval: RollingInterval.Day); });
3. 未配置自动创建日志目录
如果logs文件夹不存在,Serilog默认不会自动创建目录,可添加参数开启自动创建:
configuration.WriteTo.File(logFilePath, rollingInterval: RollingInterval.Day, createDirectory: true); // 开启自动创建目录
4. 检查IIS应用池配置
确保应用池的设置符合ASP.NET Core要求:
- 应用池的「.NET CLR版本」设置为无托管代码
- 「托管管道模式」设置为集成
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

