程序中的 Serilog class
Serilog in program class
我正在尝试在 ASP.NET 核心应用程序的 Program.cs
class 中使用 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
class:
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
class 中复制此内容时,_log
在 Main(string[] args)
中无法访问:
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
class?
尝试将 Program
添加到您的服务中。
像这样:
.Configure(services => services.AddTransiant<Program>())
构建虚拟主机时,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;
以便在 IServiceProvider
上访问 .GetService<T>()
扩展方法。
我正在尝试在 ASP.NET 核心应用程序的 Program.cs
class 中使用 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
class:
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
class 中复制此内容时,_log
在 Main(string[] args)
中无法访问:
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
class?
尝试将 Program
添加到您的服务中。
像这样:
.Configure(services => services.AddTransiant<Program>())
构建虚拟主机时,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;
以便在 IServiceProvider
上访问 .GetService<T>()
扩展方法。