提问人:Cherylaksh 提问时间:10/29/2023 最后编辑:Tiny WangCherylaksh 更新时间:10/31/2023 访问量:94
如何为 Windows 服务启用 Application Insights?
How to enable Application Insights for a windows service?
问:
我有一个 Windows 服务,其中是这样的 -Program.cs
static class Program
{
static void Main()
{
var serviceBases = new ServiceBase[]
{
new RetrievalService(),
};
ServiceBase.Run(serviceBases);
}
}
该类如下:RetrievalService
public partial class RetrievalService: ServiceBase
{
public RetrievalService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
}
我在项目中添加了 NugetPackage,并且我确实有 AppInsight 。我尝试在 Main 类中创建遥测并添加 来配置它,但 Nuget 中的所有 API 都与 ServiceCollection(用于 Web Api)相关,但无法为 ServiceBase 添加。谁能帮我解决这个问题。Microsoft.ApplicationInsights
InstrumentationKey
InstrumentationKey
答:
0赞
Qiang Fu
10/31/2023
#1
你可以试试Serilog。
安装 nuget 包Serilog
Serilog.Sinks.ApplicationInsights
检索服务.cs
public partial class RetrievalService : ServiceBase
{
public RetrievalService()
{
ServiceName = "Retrieval";
}
protected override void OnStart(string[] args)
{
Log.Information("retrieval starting...");
}
protected override void OnStop()
{
Log.Fatal("retrieval stopped!");
}
}
记录器服务.cs
public class LoggerService : ServiceBase
{
public LoggerService()
{
ServiceName = "Logger";
var connectionString = "InstrumentationKey=xxxxx;IngestionEndpoint=xxx/;LiveEndpoint=hxx";
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.ApplicationInsights(connectionString, TelemetryConverter.Traces)
.CreateLogger();
}
}
程序 .cs
var serviceBases = new ServiceBase[] {
new RetrievalService(),
new LoggerService()
};
ServiceBase.Run(serviceBases);
创建服务
测试是否启动服务。
问题是当您停止服务进程时。它不会被记录下来。记录器以保持该过程的活力。但是当服务进程终止时,它将不起作用。sc create TestService binPath=D:\TESTS\ConsoleApp3\ConsoleApp3\bin\Release\net6.0\ConsoleApp3.exe
只有当你在程序内部停止时,它才能被记录下来,因为Windows服务进程仍在运行。
var retrievalSerivce = serviceBases.FirstOrDefault(x => x.ServiceName == "Retrieval");
retrievalSerivce.Stop();
ServiceBase.Run(retrievalSerivce);
评论