如何将控制台附加到.NET Windows Service以获取ILogger日志
无需VS调试器获取.NET Windows Service的ILogger日志方案
以下是几种可行的方案,无需依赖VS调试器即可获取服务的ILogger日志:
临时追加文件/控制台日志输出
修改服务的Program.cs,在宿主构建时额外添加文件或控制台日志提供器,让服务运行时把日志输出到指定文件:public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); logging.AddFile(@"C:\ServiceLogs\MyWorkerService.log"); // 需要引入Serilog.Extensions.Logging.File或类似日志包 logging.AddEventLog(); }) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); });重启服务后,直接查看指定路径的日志文件即可获取所有ILogger输出。如果只是临时排查,也可以直接在服务器上通过命令行运行服务exe(
MyService.exe),此时服务会以控制台模式运行,日志直接输出到控制台窗口。使用dotnet-trace工具追踪日志
利用.NET CLI自带的dotnet-trace工具捕获进程的日志事件:- 先在服务器上安装工具:
dotnet tool install --global dotnet-trace - 通过
tasklist | findstr "MyService.exe"或PowerShell的Get-Process MyService获取服务的进程ID(PID) - 运行命令开始追踪:
dotnet trace collect --process-id <PID> --providers Microsoft-Extensions-Logging - 追踪完成后会生成
.nettrace文件,可通过dotnet trace convert <trace-file-path> --format netperf转换为可读格式,直接查看日志内容。
- 先在服务器上安装工具:
配置Windows事件查看器日志
确保服务已配置EventLog日志提供器,ILogger的输出会被写入Windows事件日志:
在Program.cs的日志配置中添加logging.AddEventLog(),重启服务后,打开事件查看器,在“应用程序和服务日志”下找到对应服务的日志条目,即可查看所有ILogger输出的内容。
内容的提问来源于stack exchange,提问作者Guy Cothal
相关产品推荐
相关产品推荐

