Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UseSerilog program.cs dotnet run stuck in building

Tags:

.net-5

serilog

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" />
like image 434
Fredrik Brodén Avatar asked Oct 30 '25 03:10

Fredrik Brodén


1 Answers

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.

like image 155
manokara Avatar answered Nov 01 '25 12:11

manokara



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!