Min*_*Dev 5 c# logging asp.net-core
我使用 asp.net core 1.1 组合了一个简单的控制台应用程序。我设置了 Kestrel 托管并使用了一个配置方法来注入 IApplicationBuilder和ILoggerFactory。我在loggerFactory上调用AddConsole扩展。然后我运行最简单的中间件,输出一条消息。应用代码如下所示:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
namespace DemoILoggerFactory
{
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Program>()
.Build();
host.Run();
}
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
app.Run( async context => {
await context.Response.WriteAsync("Message ..");
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行该应用程序时,我在控制台中得到以下输出:
Hosting environment: QQ
Content root path: F:\REPOS CORE 1.0.0\LOGGING\DemoILoggerFactory\src\DemoILoggerFactory\bin\Debug\netcoreapp1.0
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
Run Code Online (Sandbox Code Playgroud)
我访问“locahost:5000”后,控制台中显示以下日志信息:
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET http://localhost:5000/
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Request finished in 125.5854ms 200
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET http://localhost:5000/favicon.ico
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Request finished in 0.9471ms 200
Run Code Online (Sandbox Code Playgroud)
后来,我从配置参数中删除了 ILoggerFactory ,并在配置方法中实例化了一个。唯一的区别是Configure方法的签名和LoggerFactory 的实例。修改后的代码如下所示:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
namespace DemoILoggerFactory
{
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Program>()
.Build();
host.Run();
}
public void Configure(IApplicationBuilder app)
{
ILoggerFactory loggerFactory = new LoggerFactory();
loggerFactory.AddConsole();
app.Run( async context => {
await context.Response.WriteAsync("Message ..");
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,运行应用程序,在访问 localhost:5000 之前,控制台窗口中会显示以下信息:
Hosting environment: QQ
Content root path: F:\REPOS CORE 1.0.0\LOGGING\DemoILoggerFactory\src\DemoILoggerFactory\bin\Debug\netcoreapp1.0
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
Run Code Online (Sandbox Code Playgroud)
当我重新访问“localhost:5000”后,控制台中没有显示任何其他请求日志。
对于这两种情况,Project.json 文件如下:
{
"version": "1.0.0-*",
"buildOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.1.0"
},
"Microsoft.AspNetCore.Hosting": "1.1.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
"Microsoft.Extensions.Logging": "1.1.0",
"Microsoft.Extensions.Logging.Console": "1.1.0",
"Microsoft.AspNetCore.Http": "1.1.0"
},
"frameworks": {
"netcoreapp1.1": {
"imports": "dnxcore50"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我缺少什么?为什么两个“LoggerFactory”实例的行为不同?
我在编写ASP.NET Core 日志教程时经历了完全相同的经历。深入研究代码表明,Kestrel 还依赖于 Microsoft.Extensions.Logging。启动时,Kestrel 会向ILoggerFactoryASP.NET Core 初始化的日志添加一个记录器。记录器记录有关 Kestrel 内部的大量数据、有关 TCP 连接的信息、HTTP 请求等。如果降低Microsoft.AspNetCore.Server.Kestrel记录器类别的最低级别,您将看到来自 Kestrel 的更多日志消息。另外,如果您ILoggerFactory在调试器中检查 ASP.NET Core 提供的记录器,您将看到 Kestrel 记录器,该记录器在您自己创建的记录器中不可用。
虽然您可以通过手动创建 KestrelTrace 从 Kestrel 配置相同数量的日志消息,但我认为您会更好地使用ILoggerFactoryASP.NET Core 提供的日志消息。至少这是我的结论:)
| 归档时间: |
|
| 查看次数: |
5403 次 |
| 最近记录: |