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 NetEscapades.Extensions.Logging.RollingFile package from NuGet, either using powershell:
Install-Package NetEscapades.Extensions.Logging.RollingFile
or using the .NET CLI:
dotnet add package NetEscapades.Extensions.Logging.RollingFile
Next configure the provider by calling AddFile()
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.AddFile()) // <- Add this line
.UseStartup<Startup>()
.Build();
}
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.AddFile(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.FilesPerPeriodicityLimit = 200; // When maximum file size is reached, create a new file, up to a limit of 200 files per periodicity
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.