我正在尝试在 ASP.NET Core 应用程序的 Program.cs
类中使用 Serilog
进行日志记录。我当前的设置如下:
public class Program
{
public static void Main(string[] args)
{
DoStuff();
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, builder) =>
{
builder.AddFile(@"C:\...\log-{Date}.txt", isJson: true);
})
.UseStartup<Startup>();
}
我可以通过执行以下操作成功登录 Controller
类:
public class WebhookController : Controller
{
readonly ILogger<WebhookController> _log;
public WebhookController(ILogger<WebhookController> log)
{
_log = log;
}
public IActionResult Index()
{
_log.LogInformation("hello world");
return View();
}
}
但是,当尝试在 program
类中复制此内容时,在 Main(string[] args)
中无法访问 _log
:
public class Program
{
readonly ILogger<Program> _log;
public Program(ILogger<Program> log)
{
_log = log;
}
public static void Main(string[] args)
{
DoStuff();
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, builder) =>
{
builder.AddFile(@"C:\...\log-{Date}.txt", isJson: true);
})
.UseStartup<Startup>();
}
如何配置 Serilog 登录 program
类?
最佳答案
构建 Web 主机后,IWebHost
暴露 IWebHost.Services
Property
public IServiceProvider Services { get; }
可用于解决所需的依赖关系。
public class Program {
public static void Main(string[] args) {
var webHost = CreateWebHostBuilder(args).Build();
var services = webHost.Services;
var log = services.GetService<ILogger<Program>>();
DoStuff(log);
webHost.Run();
}
static void DoStuff(ILogger<Program> log) {
//...
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, builder) =>
{
builder.AddFile(@"C:\...\log-{Date}.txt", isJson: true);
})
.UseStartup<Startup>();
}
请记住包含 using Microsoft.Extensions.DependencyInjection;
为了能够访问.GetService<T>()
IServiceProvider
上的扩展方法.
关于c# - 程序类中的 Serilog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53904616/