2017-12-14 4 views
2

生産と開発環境のためのasp.netコア2.0プロジェクトのコンソールログに日付と時刻を記述する方法はありますか?コンソールログの日付と時刻

私は、起動中に次き:

services.AddLogging(builder => 
{ 
      builder.AddConfiguration(Configuration.GetSection("Logging"+Environment.EnvironmentName)) 
        .AddConsole() 
        .AddDebug(); 
}); 

Appsettings.json:(ログ行の日付や時刻なし)

"LoggingDevelopment": { 
    "IncludeScopes": false, 
    "Console": { 
     "LogLevel": { 
     "Default": "Debug", 
     "System": "Information", 
     "Microsoft": "Information" 
     } 
    } 
    }, 
    "LoggingProduction": { 
    "IncludeScopes": false, 
    "Console": { 
     "LogLevel": { 
     "Default": "Error", 
     "System": "Error", 
     "Microsoft": "Error" 
     } 
    } 
    }, 

現在の[開発]ログレイアウト:

info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2] 
     Executed action a.Controller (project) in 531.2457ms 
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2] 
     Request finished in 532.5812ms 200 text/html; charset=utf-8 

エラーラインのための生産モードでは、日付と時刻が非常に便利です。

+1

この有用かもしれません:https://github.com/aspnet/Logging/issues/483。 –

答えて

2

デフォルトコンソールロガーはかなり制限されています。もちろん、蛇によって提供されたGithub問題で言われているようなラムダフォーマッタを使用する可能性は常にあります。しかし、raw ILogger.Log()メソッドを使用する場合にのみアクセス可能です。 LogInformationLogErrorのような拡張子は、​​では利用できません。ロギングコールを制御しない場合、このオプションは使用できません。 ASP.NETコアの内部クラスによってログが行われるのは実際にはあなたのケースです。

したがって、.Netコア用のロガーの柔軟な実装が必要です。私はSerilogの使用をお勧めします。それは非常にシンプルですが、同時に非常に柔軟で強力です。 ASP.Net CoreアプリケーションにSerilogを統合する

は、次のようにします。

  1. NuGetパッケージ以下のインストール:

    Serilog.AspNetCore

    Serilog.Sinks.Console

    コンソールのほかに、Serilogは、他の多くをサポートしていますローリング・ファイル、電子メール、SQL Serverなどのターゲット。この他ののリストを参照してください。。アプリケーションの起動時に

  2. 設定Serilog:ここ

はサンプルです:出力テンプレートを提供

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     Log.Logger = new LoggerConfiguration() 
      .MinimumLevel.Debug() 
      .MinimumLevel.Override("Microsoft", LogEventLevel.Information) 
      .Enrich.FromLogContext() 
      .WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}") 
      .CreateLogger(); 

     BuildWebHost(args).Run(); 
    } 

    public static IWebHost BuildWebHost(string[] args) => 
     WebHost.CreateDefaultBuilder(args) 
      .UseStartup<Startup>() 
      .UseSerilog() 
      .Build(); 
} 

はログに記録されたメッセージに日付と時刻を追加します。

enter image description here

+0

環境に基づいて(セルログの)ログレベルを設定する方法は、生産の最小限のエラーと開発の最小限の情報のためですか? – Wouter

+2

この違いを 'appsettings。{env.EnvironmentName} .json'で指定し、値を上のサンプルで' MinimumLevel.Override( "Microsoft"、LogEventLevel.Information) 'に渡すことができます。 Serilogは、ファイルから全体の構成をロードすることもサポートしています。詳細を確認してください:https://github.com/serilog/serilog-settings-configuration – CodeFuller