Wouter
Wouter

Reputation: 1353

Date and time in console log

Is their a way to mention the date and time in the console log of an asp.net core 2.0 project for production and development environment?

I have following in my startup:

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

Current [development] log layout (without a date or time of the log line):

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

A date and time would be extremly handy in production mode for error lines.

Upvotes: 4

Views: 3797

Answers (2)

ewilan
ewilan

Reputation: 716

To expand on CodeFuller's response, here's how you can modify the Serilog Console output formatter purely from configuration:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "System": "Information",
        "Microsoft": "Information"
      }
    },
    "WriteTo:Sublogger": {
      "Name": "Logger",
      "Args": {
        "configureLogger": {
          "WriteTo": [
            {
              "Name": "Console",
              "Args": {
                "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] [{TraceId}] {Message:lj}{NewLine}{Exception}"
              }
            }
          ]
        }
      }
    }
  }
}

If you take this approach, remove the WriteTo.Console logger method from your startup configuration. This line:

 .WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}")

I've also modified the output format template slightly. Either template will work fine.

Upvotes: 1

CodeFuller
CodeFuller

Reputation: 31282

Default Console logger is pretty limited. Of course there is always the possibility to use lambda formatter like said in Github issue provided by serpent5. But it's accessible only if using raw ILogger.Log() method. It's not available for ILogger extensions like LogInformation or LogError. This option is also not available if you don't control logging call. It's actually your case when logging is done by ASP.NET Core internal classes.

So you need some more flexible implementation of logger for .Net Core. I suggest using of Serilog. It's pretty simple but very flexible and powerful at the same time.

To integrate Serilog into ASP.Net Core application do the following:

  1. Install following NuGet packages:

    Serilog.AspNetCore

    Serilog.Sinks.Console

    Besides Console, Serilog supports many other targets like Rolling File, E-mail, SQL Server, etc. See this list of other Serilog targets.

  2. Configure Serilog on application startup:

Here is a sample:

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();
}

Provided output template adds date and time to logged message:

enter image description here

Upvotes: 6

Related Questions