2016-11-27 13 views
3

私はasp.netコア1.1を使用して簡単なコンソールアプリケーションを作成しました。 Iセットアップケストレルはホスティングと私は IApplicationBuilderILoggerFactoryを注入設定方法を使用していました。 私はAddConsoleエクステンションをloggerFactoryと呼んでいます。 次に、私は最も単純なミドルウェアを実行し、メッセージを出力します。 アプリケーションコードは以下の通りである:私は「locahost:5000」を訪問した後コンソールアプリケーションでILoggerFactoryを注入するとasp.netコア1.1のインスタンスを生成するvs

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. 

:私は、アプリケーションを実行すると

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 .."); 
      }); 
     } 
    } 
} 

が、私はコンソールで次の出力を取得するには、次のログ情報ですコンソールに示されている:

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 

後、私は設定引数とinstantiaからILoggerFactoryを削除メソッドを構成してください。唯一の違いは、の署名に設定され、が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 .."); 
      }); 
     } 
    } 
} 

、アプリケーションを実行すると、私はローカルホストを訪問する前に:5000、以下の情報がコンソールウィンドウに表示さ: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. 

コンソールに追加の要求ログは表示されません。次のように

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

何をしないのですか? 2つの「LoggerFactory」インスタンスの動作が異なるのはなぜですか?

答えて

2

これは、ASP.NET Core Logging Tutorialと書いている間はまったく同じです。コードを調べると、KestrelもMicrosoft.Extensions.Loggingに依存していることがわかりました。 Kestrelを起動すると、ASP.NET Coreによって初期化されたILoggerFactoryにロガーが追加されます。 Loggerは、Kestrelの内部に関する多くのデータ、TCP接続、HTTP要求などに関する情報をログに記録します。Microsoft.AspNetCore.Server.Kestrelロガーカテゴリの最小レベルを下げると、Kestrelからさらに多くのログメッセージが表示されます。また、デバッガでASP.NETコアが提供するILoggerFactoryを調べると、自分で作成したKestrelロガーは表示されません。

KestrelTraceを手作業で作成することで、Kestrelから同数のログメッセージを設定できるかもしれませんが、ASP.NETコアが提供するILoggerFactoryを使用する方がよいと思います。少なくともそれは私の結論でした:)

関連する問題