Set Serilog minimum level from environment variable

Set Serilog minimum level from environment variable

问题

Is it possible to setup Serilog minimum log level from environment variable?

If I try to configure it like this

  "Serilog": {
    "MinimumLevel": "%LOG_LEVEL%",
    "WriteTo": [
      {
        "Name": "RollingFile",
        "Args": {
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] [v{SourceSystemInformationalVersion}] {Message}{NewLine}{Exception}",
          "pathFormat": "%LOG_FOLDER%/sds-osdr-domain-saga-host-{Date}.log",
          "retainedFileCountLimit": 5
        }
      }
    ]
  }

it returns error

The value %LOG_LEVEL% is not a valid Serilog level.

Is it possible to propagate log level from environment variable somehow?

 

回答

I think you are asking about configuration by environment which is not specific to serilog.

If the LOG_LEVEL is fixed with the specific environment (development, staging or production), you can set the each LOG_LEVEL in appsettings.<EnvironmentName>.json, and set configuration like this:

var config = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
    .Build();

If you need to config the LOG_LEVEL from environment variable in docker-compose file or kubernetes deployment file, then you can read values from environment variables by calling AddEnvironmentVariables:

var config = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false)
    .AddEnvironmentVariables()
    .Build();

And set the environment Serilog:MinimumLevel in windows or ``Serilog__MinimumLevel` in linux and mac.

 

serilog / serilog-settings-configuration

After installing this package, use ReadFrom.Configuration() and pass an IConfiguration object.

static void Main(string[] args)
{
    var configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json")
        .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true)
        .Build();

    var logger = new LoggerConfiguration()
        .ReadFrom.Configuration(configuration)
        .CreateLogger();

    logger.Information("Hello, world!");
}

This example relies on the Microsoft.Extensions.Configuration.Json, Serilog.Sinks.Console, Serilog.Sinks.File, Serilog.Enrichers.Environment and Serilog.Enrichers.Thread packages also being installed.

For a more sophisticated example go to the sample folder.

 

 

 

作者:Chuck Lu    GitHub    
posted @   ChuckLu  阅读(110)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2021-08-16 xpath injection
2017-08-16 各种浏览器的兼容css
2017-08-16 vs输出窗口,显示build的时间
2017-08-16 sass
点击右上角即可分享
微信分享提示