Raymond Raymond

Logging configuration in .NET core

event 2017-10-15 visibility 11,564 comment 0 insights toc
more_vert
insights Stats

.NET core introduces a logging API that works with a number of logging frameworks. The built-in providers are configurable and extensible to support different level loggings.

Built-in Logging Providers

Microsoft provides a number of built-in providers.  There are two logging providers created in the project templates: Console and Debug.

Console writes logs to the console while Debug uses System.Diagnostics.Debug to write logs.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IDatabaseInitializer dbInitializer)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

//…

}

There are also other built-in providers like EventSource, EventLog, Azure App Service and TraceSource.

Logging Configurations

In the above example, it specifies Logging section in configuration file is configured for Console logging provider.

"Logging": {
     "IncludeScopes": false,
     "LogLevel": {
       "Default": "Warning"
     }
   }

About Scope

IncludeScopes indicates whether logging scope is supported.

Scope can be used to group a number of logical operations to attach the same data to each log created within that scope.

For more details, please refer to:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging?tabs=aspnetcore2x#log-scopes

LogLevel

Different levels of logging are supported. As described in the following code, the most detailed level is Trace. In the configuration sample ‘"Default": "Warning"’, default logging level is Warning, which means only Warning, Error and Critical messages will be logged in Console.

namespace Microsoft.Extensions.Logging
{
     //
     // Summary:
     //     Defines logging severity levels.
     public enum LogLevel
     {
         //
         // Summary:
         //     Logs that contain the most detailed messages. These messages may contain sensitive
         //     application data. These messages are disabled by default and should never be
         //     enabled in a production environment.
         Trace = 0,
         //
         // Summary:
         //     Logs that are used for interactive investigation during development. These logs
         //     should primarily contain information useful for debugging and have no long-term
         //     value.
         Debug = 1,
         //
         // Summary:
         //     Logs that track the general flow of the application. These logs should have long-term
         //     value.
         Information = 2,
         //
         // Summary:
         //     Logs that highlight an abnormal or unexpected event in the application flow,
         //     but do not otherwise cause the application execution to stop.
         Warning = 3,
         //
         // Summary:
         //     Logs that highlight when the current flow of execution is stopped due to a failure.
         //     These should indicate a failure in the current activity, not an application-wide
         //     failure.
         Error = 4,
         //
         // Summary:
         //     Logs that describe an unrecoverable application or system crash, or a catastrophic
         //     failure that requires immediate attention.
         Critical = 5,
         //
         // Summary:
         //     Not used for writing log messages. Specifies that a logging category should not
         //     write any messages.
         None = 6
     }
}

Another Example

{
     "Logging": {
         "LogLevel": {
             "MyController": "Error",

            "MyNamespace": "Debug",
             "Default": "Information",
             "Microsoft": "Warning"       
         }
     }
}

In this example above, the log levels are:

  1. Controller MyController: Error
  2. All the categories that begin with MyNamespace: Debug
  3. Default log level is Information (will be used when no filters match)
  4. Microsoft: only Warning messages will be logged.

Configure using Code

You can also use code in your Startup class to configure loggings and filters.

services.AddLogging(options =>
             {
                 options.AddFilter("Microsoft", LogLevel.Critical);
             });

More from Kontext
comment Comments
No comments yet.

Please log in or register to comment.

account_circle Log in person_add Register

Log in with external accounts