Logging configuration in .NET core
.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:
- Controller MyController: Error
- All the categories that begin with MyNamespace: Debug
- Default log level is Information (will be used when no filters match)
- 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);
});