Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Serilog not working from configuration in asp.net core 2.2 API

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
           .UseSerilog((ctx, config) => { config.ReadFrom.Configuration(ctx.Configuration); })
           .UseStartup<Startup>();
}


public class Startup
{
    public IContainer Container { get; private set; }
    public Startup(IConfiguration configuration)
    {
        Log.Warning("test");
        Configuration = configuration;
    }

}

appsettings.json

{
    "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Default": "Information",
        "Microsoft": "Information",
        "System": "Information"
      }
    },
    "WriteTo": [

      {
        "Name": "RollingFile",
        "Args": {
          "pathFormat": "C:\\test.txt",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.ffff}|{TenantName}|{RequestId}|{SourceContext}|{Level:u3}|{Message:lj}{NewLine}{Exception}",
          "restrictedToMinimumLevel": "Information"
        }
      }
    ]
  },

  "AllowedHosts": "*"
}

I have all the packages installed

  • Serilog,
  • Serilog.AspCore,
  • Serilog.Settings.Configuration,
  • Serilog.Sink.File
like image 540
Zoinky Avatar asked Feb 03 '23 20:02

Zoinky


2 Answers

Your config is for RollingFile but your package list says Serilog.Sinks.File. These are different. You need to add the Serilog.Sinks.RollingFile package and it should start working.

If you want to use the File sink (which, as @Kirk mentioned in the comments, is the recommended option now) then you need to change the settings to

"WriteTo": [
    {
        "Name": "File",
        "Args": {
            "path": "C:\\test.txt",
            "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.ffff}|{TenantName}|{RequestId}|{SourceContext}|{Level:u3}|{Message:lj}{NewLine}{Exception}",
            "restrictedToMinimumLevel": "Information"
        }
    }

NOTE

The pathFormat should be path for the File sink

See the Serilog File Sink Documentation

like image 105
Simply Ged Avatar answered Feb 06 '23 11:02

Simply Ged


This is not an answer but an observation. I had observed a definite problem here. I have got three settingss files.

  1. appsettings.json,
  2. appsettings.Development.json,
  3. appsettings.VivekDev.json

I have selected the profile from launchSettings.json such that the environment is VivekDev as follows.

"ASPNETCORE_ENVIRONMENT": "VivekDev"

Now when i have the following setting in appsettings.VivekDev.json without having any Serilog setting in appsettings.json, then things are working fine.

  "Serilog": {
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "log.txt",
          "rollingInterval": "Day"
        }
      }
    ]
  },

But when I have

"Serilog": {
  "WriteTo": [ "Debug" ]
},

in appsettings.json, this is somehow overriding the setting in appsettings.VivekDev.json. As per my understanding this is incorrect and the setting inside of appsettings.VivekDev.json should override appsettings.json.

And this is happening only in case of File sink. If I use other sink such as console then things are working as expected. That is the serilog setting inside of appsettings.VivekDev.json is correctly overriding the serilog setting of appsettings.json.

Something is definitely buggy here.

So of the now, I have removed the serilog settings in the appsettings.json and kept the serilog write to file setting in appsettings.VivekDev.json.

like image 42
VivekDev Avatar answered Feb 06 '23 09:02

VivekDev