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

Serilog File Sink作为Windows服务运行时无法写入日志文件

Worker Service作为Windows服务运行时Serilog File Sink无法写入日志的原因及解决方案

核心原因

  • Windows服务的默认工作目录并非应用程序的安装目录,而是C:\Windows\System32。你配置中使用的相对路径logs/log.log,会让服务尝试在System32目录下创建logs文件夹并写入日志。即便你确认了程序目录的权限,System32目录的写入权限通常对普通服务账户(如Local Service、Network Service)严格限制,导致无法写入。
  • 在Visual Studio中运行时,应用的工作目录是项目输出目录(如bin/Debug/net6.0),相对路径会指向该目录下的logs文件夹,因此能正常写入。

解决方案

1. 使用绝对路径

直接在配置文件中指定完整的日志路径,确保目标目录已创建且服务账户拥有写入权限:

"Args": {
  "path": "C:\\Logs\\ThePingService\\log.log",
  "rollingInterval": "Day",
  "restrictedToMinimumLevel": "Information"
}

2. 动态生成基于应用目录的路径

通过代码获取应用程序的实际安装目录,再拼接日志路径,替代配置文件中的相对路径。示例代码如下:

using Serilog;
using System.IO;

// 在Program.cs中配置Serilog时
Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(builder.Configuration)
    // 覆盖配置文件中的File Sink路径,使用应用目录
    .WriteTo.File(
        path: Path.Combine(AppContext.BaseDirectory, "logs", "log.log"),
        rollingInterval: RollingInterval.Day,
        restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information
    )
    .CreateLogger();

3. 修改服务的工作目录(可选)

通过Windows服务属性或命令行工具(如sc命令)修改服务的工作目录为应用安装目录:

sc config "YourServiceName" workingdirectory= "C:\Path\To\Your\Service"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:52:21