2017-03-14 5 views
0

ASP.NET Core MVCアプリケーションのアプリケーションログを有効にすると、APIに対する各要求に対して多くの低レベルの詳細が記録されています。 )。MVCによるトレースのようなINFOログを無効にする

私はこれがアプリケーションのログを汚染していることがわかりました(特に、何百分もの要求を受けているため)。

これを無効にする方法はありますか?あるいは、私はロギングの別のアプローチを検討する必要がありますか? 23:46.944 00:APIリクエスト

2017年3月14日09

例INFOログ00 [情報]リクエスト開始HTTP/1.1 http://example.net/api/somethingアプリケーション/ JSON

をGET 2017-03-14 09:23:46.944 + 00:00 [情報] トークンが正常に検証されました。

2017-03-14 09:23:46.944 + 00:00 [情報] HttpContext.UserはauthenticationScheme: "Bearer"のAutomaticAuthenticationによって をマージしました。

2017-03-14 09:23:46.944 + 00:00 [情報] AuthenticationScheme: "Bearer"が正常に認証されました。

2017-03-14 09:23:46.944 +00:00 [情報]承認が成功しました。ユーザー:nullの場合、 が成功しました。

2017年3月14日09:23:46.944 +00:00 [情報]アクション実行方法 "Xyz.GetAsync(Xyz.Api)" 引数([ "Xyz.Something"、 "" と 、 ""、 ""、 ""、 "0"、 "100"、 ""、 "2017-06-01T00:00:00Z"、 "FALSE"]) - にModelStateは有効

2017-03-あります14 09:23:47.115 +00:00 [情報] JsonResultを実行すると、 "Xyz.Resources.SomeModel []"という値を書き込みます

2017年3月14日09:23:47.115 +00:00 [情報]実行されたアクション "Xyz.GetAsync(Xyz.Api)" 206.5169ms

2017年3月14日9時23分に:47.115 +00:00 [インフォメーション] 216.8241ms 200 application/jsonでリクエストが完了しました。文字セット= UTF-8

+0

@DavidPineそれでは、私たち自身の情報レベルのアプリケーションログが出てこないという問題があります。 – davenewza

+0

回答に返信することができます。いずれにしても、適切なレベルでフィルタリングやログを取ることができます。おそらくフィルタリングが必要です。 –

答えて

2

ログレベル

すべてがInformationように見えるこれらの、あなたはログに記録されたエントリのレベルはインフォ」よりも大きいようなappsettings.jsonでこれを調整することができるはずです"... Log Levelを参照してください。

ログイベントID

ログレベルはアプリケーション全体に適用され、そのログを使用するすべてのものはその点では同じです。あなたのログを目立たせ、もっと重要であると思うようにするには、そのようにログします。適切な場合は、警告としてログに記録します。また、別の方法として、EventIdを使用してログの分離を開始することもできます。アイデアとは、ログを「id」と照らし合わせてフィルタリングして、関心のあるものをすばやく見つけることができるということです。

フィルタ

最後に、あなたは、フィルタを適用することができます。

あなたはWithFilter拡張メソッドを使用して ILoggerFactoryインスタンスに登録されているすべてのプロバイダのフィルタリングルールを設定することができます。 以下の例では、アプリケーションログを デバッグレベルにしている間、フレームワークログ(カテゴリは 「Microsoft」または「System」で始まります)を警告に制限しています。

public void Configure(IApplicationBuilder app, 
    IHostingEnvironment env, 
    ILoggerFactory loggerFactory) 
{ 
    loggerFactory 
     .WithFilter(new FilterLoggerSettings 
     { 
      { "Microsoft", LogLevel.Warning }, 
      { "System", LogLevel.Warning }, 
      { "ToDoApi", LogLevel.Debug } 
     }) 
     .AddConsole() 
     .AddDebug() 
} 

私は、フィルタは、あなたがここに探していることだろう何だと思います。 MicrosoftSystemの両方がLogLevel.Warningにあると指定すると、重要なログのみが表示されます。上記の追加

public virtual void ConfigureServices(IServiceCollection services) 
{ 
    services.AddSingleton<ILoggerFactory, LoggerFactory>(); 
    services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); 
    services.AddLogging(builder => 
    { 
     builder.SetMinimumLevel(LogLevel.Trace); 
     builder.AddFilter("Microsoft", LogLevel.Warning); 
     builder.AddFilter("System", LogLevel.Error); 
     builder.AddFilter("Engine", LogLevel.Debug); 
    }); 

    /// ... etc 
} 

は私のためにトリックをした:このためのフックがnetcoreapp2.0に少し変更されているよう

関連する問題