Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在控制台应用程序中注入iLogger工厂与在asp.net core 1.1中实例化工厂_C#_Logging_Asp.net Core - Fatal编程技术网

C# 在控制台应用程序中注入iLogger工厂与在asp.net core 1.1中实例化工厂

C# 在控制台应用程序中注入iLogger工厂与在asp.net core 1.1中实例化工厂,c#,logging,asp.net-core,C#,Logging,Asp.net Core,我使用asp.net core 1.1构建了一个简单的控制台应用程序。 我设置Kestrel主机,并使用配置方法进行注入 IApplicationBuilder和iLogger工厂。 我调用loggerFactory上的AddConsole扩展。 然后我运行最简单的中间件,输出一条消息。 应用程序代码如下所示: using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNe

我使用asp.net core 1.1构建了一个简单的控制台应用程序。 我设置Kestrel主机,并使用配置方法进行注入 IApplicationBuilderiLogger工厂。 我调用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 ..");
            });
        }
    }
}
在我访问“locahost: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.
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
后来,我从Configure参数中删除了iLogger工厂,并在Configure方法中实例化了一个。唯一的区别是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 ..");
            });
        }
    }
}
在我重新访问“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"
    }
  }
}
我错过了什么?
为什么这两个“LoggerFactory”实例的行为不同?

我在写这篇文章时经历了完全相同的情况。深入研究代码表明,Kestrel还依赖于Microsoft.Extensions.Logging。启动时,Kestrel向ASP.NET核心初始化的
iLogger工厂添加一个记录器。记录器记录有关Kestrel内部的大量数据、有关TCP连接的信息、HTTP请求等。如果您降低
Microsoft.AspNetCore.Server.Kestrel
logger类别的最低级别,您将看到更多来自Kestrel的日志消息。此外,如果您在调试器中检查ASP.NET Core提供的
iLogger工厂
,您将看到Kestrel logger,该记录器在您自己创建的记录器中不可用

虽然您可以通过手动创建日志来配置来自Kestrel的相同数量的日志消息,但我认为您最好使用ASP.NET Core提供的
ILoggerFactory
。至少这是我的结论:)

{
  "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"
    }
  }
}