using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using SerilogTracing;
namespace Dpz.Core.Infrastructure.Configuration;
/// <summary>
/// 管理 SerilogTracing 生命周期<see cref="ActivityListenerConfiguration"/>.
/// 在主机启动时启动监听器,并在主机关闭时将其释放
/// </summary>
internal sealed class TracingLifetimeService : IHostedService, IDisposable
{
private IDisposable? _listener;
public Task StartAsync(CancellationToken cancellationToken)
{
_listener = new ActivityListenerConfiguration()
.Instrument.AspNetCoreRequests()
.TraceToSharedLogger();
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
_listener?.Dispose();
_listener = null;
return Task.CompletedTask;
}
public void Dispose()
{
_listener?.Dispose();
}
}
评论加载中...