A rolling file provider for ASP.NET Core 2.1 Microsoft.Extensions.Logging, the logging subsystem used by ASP.NET Core. Writes logs to a set of text files, one per day.
First Install the Geexbox.Logging.RollingFile package from NuGet, either using powershell:
Install-Package Geexbox.Logging.RollingFileor using the .NET CLI:
dotnet add package Geexbox.Logging.RollingFileNext configure the provider by calling AddRollingFile() on an ILoggingBuilder during logger configuration in Program.cs.
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging(builder => builder.AddRollingFile()) // <- Add this line
.UseStartup<Startup>()
.Build();
}It will read appsettings.json for configurations
You can pass additional options to the Add File by passing an Action<FileLoggerOptions>, for example:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging(builder => builder.AddRollingFile(options => {
options.FileName = "diagnostics-"; // The log file prefixes
options.LogDirectory = "LogFiles"; // The directory to write the logs
options.FileSizeLimit = 20 * 1024 * 1024; // The maximum log file size (20MB here)
options.Extension = "txt"; // The log file extension
options.Periodicity = PeriodicityOptions.Hourly // Roll log files hourly instead of daily.
}))
.UseStartup<Startup>()
.Build();
}Finally The provider will create log files prefixed with the FileName, and suffixed with the current date in the yyyyMMddHHmm format (using only the portions up to the selected periodicity, yyyyMMdd for the default of daily).
log-20160631.txt
log-20160701.txt
log-20160702.txt
Logs will look something like the following:
2017-09-01 18:34:18.083 +01:00 [Information] Microsoft.AspNetCore.Hosting.Internal.WebHost: Request starting HTTP/1.1 GET http://localhost:50037/api/values
2017-09-01 18:34:18.159 +01:00 [Information] Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Executing action method SampleApp.Controllers.ValuesController.Get (SampleApp) with arguments ((null)) - ModelState is Valid
2017-09-01 18:34:18.161 +01:00 [Information] SampleApp.Controllers.ValuesController: Executed Get action
2017-09-01 18:34:18.165 +01:00 [Information] Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor: Executing ObjectResult, writing value Microsoft.AspNetCore.Mvc.ControllerContext.
2017-09-01 18:34:18.192 +01:00 [Information] Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Executed action SampleApp.Controllers.ValuesController.Get (SampleApp) in 36.3435ms
2017-09-01 18:34:18.195 +01:00 [Information] Microsoft.AspNetCore.Hosting.Internal.WebHost: Request finished in 113.6076ms 200 application/json; charset=utf-8
This provider is heavily cribbed from the Azure App Service Logging Provider from the ASP.NET team.
{ //... "Logging": { "RollingFile": { "LogLevel": { "Default": "Information" }, "LogDirectory": "App_Data/Logs", "FileName" : "diagnostics-", // The log file prefixes "LogDirectory" : "LogFiles", // The directory to write the logs "FileSizeLimit" : 20971520, // The maximum log file size (20MB here) "Extension" : "log", // The log file extension "Periodicity" : "Hourly" // Roll log files hourly instead of daily. }, }, //... }