When i UseSerilog in program.cs. And use f5 start new instance with iis express. it works fine and logs to database, but when i do dotnet run in cmd the message get stuck forever in "Building.." and nothing happens no errors or nothing.
I use WriteTo: MSSqlServer. If i change to WriteTo console it starts to works with dotnet run.
My code:
Program.cs:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddJsonFile(Path.Combine(env.ContentRootPath, "connectionStrings.json"),
optional: true,
reloadOnChange: true);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseSerilog((hostingContext, services, loggerConfiguration) =>
{
loggerConfiguration
.ReadFrom.Configuration(hostingContext.Configuration)
.Enrich.FromLogContext()
.Filter.ByExcluding(Matching.FromSource("Microsoft"))
.Filter.ByExcluding(Matching.FromSource("System"));
});
}
appsettings.json:
"Serilog": {
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "RSAnsokanData",
"tableName": "Log",
"autoCreateSqlTable": true
}
}
]
}
I use .net 5.0
with
<PackageReference Include="Serilog" Version="2.10.0" />
<PackageReference Include="Serilog.AspNetCore" Version="3.4.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.MSSqlServer" Version="5.6.0" />
My case was quite similar to Sk Shahnawaz-ul's answer. I setup the logger using the appsettings.ENVIRONMENT.json file, like this:
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production";
Console.WriteLine($"Starting project on {environmentName}!");
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{environmentName}.json")
.Build();
var config = new LoggerConfiguration()
.ReadFrom.Configuration(configuration);
Log.Logger = config.CreateLogger();
By default, Serilog looks for a "Serilog" key in the JSON. The problem was that I started working on the project on another machine with a different environment name, but the appsettings.newmachine.json file didn't have the key. I copied it from the other machine's appsettings and now everything is working.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With