I have a console application in .net core 3.1 and i configured serilog for logging to file purpose. The WriteTo.Console working but WriteTo.File not working (without any error).
I installed this version for Serilog (NuGet):
Serilog: 2.11.0
Serilog.Extensions.Hosting: 4.2.0
Serilog.Settings.Configuration: 3.3.0
Serilog.Sinks.Async: 1.5.0
Serilog.Sinks.Console: 4.0.1
Serilog.Sinks.File: 4.1.0
Below code is the Serilog config:
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Build())
.MinimumLevel.Information()
.MinimumLevel.Override("Microsoft", LogEventLevel.Error)
.MinimumLevel.Override("System", LogEventLevel.Error)
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
Log.Logger.Information("Application Starting");
Here is the Main mathod of the console app:
static void Main(string[] args)
{
var host = AppStartup();
Log.Warning("test log");
Console.ReadKey();
}
static void BuildConfig(IConfigurationBuilder builder)
{
builder.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
}
static IHost AppStartup()
{
var builder = new ConfigurationBuilder();
BuildConfig(builder);
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Build())
.MinimumLevel.Information()
.MinimumLevel.Override("Microsoft", LogEventLevel.Error)
.MinimumLevel.Override("System", LogEventLevel.Error)
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
Log.Logger.Information("Application Starting");
var host = Host.CreateDefaultBuilder() // Initialising the Host
.ConfigureServices((context, services) => { // Adding the DI container for configuration
})
.UseSerilog() // Add Serilog
.Build(); // Build the Host
return host;
}
}
And the appsetting.json data:
{
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"MinimalLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Information",
"System": "Warning"
}
}
},
"ConnectionStrings": {
"DefaultConnection": "DataSource=app.db;Cache=Shared"
}
}
Solved! Just use explicit full path! @DavidG thank you for your help.
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Build())
.MinimumLevel.Information()
.MinimumLevel.Override("Microsoft", LogEventLevel.Error)
.MinimumLevel.Override("System", LogEventLevel.Error)
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.File("C:\\Logs\\log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();