Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Log event datetime with.Net Core Console logger

I'm using logging to Console output, that built-in to .Net Core framework. Here initialization of the logger:

var serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton(new LoggerFactory()
                    .AddConsole());

Also for logging I'm using Microsoft.Extensions.Logging.LoggerExtensions class with methods Log... Here an example of logging in my App:

_logger.LogInformation(eventId, "Action is started.");

Where _logger is instance of ILogger<T> class and initialized in the class constructor with built-in dependency injection. As result of calling of the above method Console output shows following string:

info: NameSpaceName.ClassName[eventId] Action is started.

I would like to display date-time in the Console output, that points to time, when the Log method is executed, but it seems that Log.. methods don't contain any methods that allow to display date time.

Does it exist some method or additioanl classes-formatters that allow to display the action datetime in console output without passing it to the method as part of the message?

like image 404
digor_ua Avatar asked Aug 01 '17 09:08

digor_ua


4 Answers

The feature was added into version 3 of the Microsoft.Extensions.Logging.Console(here is the pr). You can activate this with setting the TimestampFormat:

  new ServiceCollection()      .AddLogging(opt =>      {          opt.AddConsole(c =>          {             c.TimestampFormat = "[HH:mm:ss] ";          });     }) 
like image 155
sschoof Avatar answered Oct 07 '22 16:10

sschoof


Built-in .NET Core console logger doesn't log date-time. Track this issue to get more details. The easiest workaround is:

logger.Log(LogLevel.Information, 1, someObj, null, (s, e) => DateTime.Now + " " + s.ToString()); 

I wrote a custom console logger to automatically log the timestamp and do other useful tricks:

[2017.06.15 23:46:44] info: WebHost[1]      Request starting HTTP/1.1 GET http://localhost:6002/hc 
like image 40
Ilya Chumakov Avatar answered Oct 07 '22 15:10

Ilya Chumakov


Example in .NET 5 (ASP.NET Core):

public void ConfigureServices(IServiceCollection services)
{
    services.AddLogging(options =>
    {
        options.AddSimpleConsole(c =>
        {
            c.TimestampFormat = "[yyyy-MM-dd HH:mm:ss] ";
            // c.UseUtcTimestamp = true; // something to consider
        });
    });

    // ...
}

Output example:

[2020-12-13 12:55:44] info: Microsoft.Hosting.Lifetime[0] Application is shutting down...
like image 22
Paweł Bulwan Avatar answered Oct 07 '22 14:10

Paweł Bulwan


For ASP.NET Core, you might prefer to use configuration file appsettings.json over wiring it directly into the code.

{
  "Logging": {
    "Console": {
      "TimestampFormat": "[yyyy-MM-dd HH:mm:ss] "
    }
  }
}

This works out of the box, provided that Host.CreateDefaultBuilder() is invoked in Program.cs

like image 30
R. V. Avatar answered Oct 07 '22 16:10

R. V.