我无法从我的 IIS 托管的 .net core 2.2 应用程序中获取 Seq 中的日志语句。当我使用 IISExpres 调试和运行应用程序时,会出现这些日志。但是,当应用程序从真实 IIS 的应用程序池运行时,只有 RequestLogging 日志显示在 Seq 中。我想念我的日志。
这是我所做的:
已安装 Nuget 包 Serilog、Serilog.Aspnetcore 和 Serilog.Sinks.Seq。
删除了所有 Microsoft.Extensions.Logging 和引用。
按照 Serilog.Aspnetcore Github 页面上的示例在 Program.cs 中实施内联配置:
public class Program
{
...
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog((hostingContext, loggerConfiguration) =>
loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration)
, preserveStaticLogger: true, writeToProviders: false);
}
- 在 Startup.cs 中添加了请求日志记录:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
....
app.UseHttpsRedirection();
app.UseSerilogRequestLogging();
app.UseMvc();
}
- 在 appsettings.json 中配置了 Serilog,因此 apiKey 和 Seq serverUrl 可以在 Azure DevOps 部署中配置用于开发、测试和生产环境:
{
"Serilog": {
"Using": [ "Serilog.Sinks.Seq" ],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"Enrich": [ "FromLogContext" ],
"WriteTo": [
{
"Name": "Seq",
"Args": {
"apiKey": "iVPcw1...",
"serverUrl": "http://localhost:5341"
}
}
]
},
...
}
- 像往常一样在类中添加记录器和初始化,如下所示:
public class SomeService : ISomeService
{
private readonly ILogger logger;
...
public SomeService( ...injections...) {
logger = Log.ForContext<SomeService>();
...
}
...
public async Task ServiceMethod(Data d)
{
logger.Information("ServiceMethod called with {@d}");
}
...
}