《ASP.NET Core 高性能系列》关于.NET Core的配置信息的若干事项

1.配置文件的相关闲话

  Core自身对于配置文件不是必须品,但由上文分析可知ASP.NET Core默认采用appsettings.json做为配置文件,关于配置信息的优先等级javascript

命令行>环境变量>自我订制的配置(AddUserSecrets)>和当前环境相匹配的appsettings.json中的配置>大于appsettings.json中的配置java

  关于AddUserSecrets是什么这里简单一言以蔽之:每一个开发人员有本身特性的配置数据,这些配置信息仅仅属于我的,不能提交给团队成员,docker

  可是又不想不团队共有的配置所影响. 剩下的自行去了解,关键是上面的优先级json

  和当前环境相匹配的appsettings.json如appsettings.Development.jsonwindows

 

2.日志配置的问题

系统默认采用Microsoft.Extensions.Logging系列套餐做为默认的日志组件,且采用配置文件中的Logging节点做为日志的默认配置参数依据。以下图所示:app

 

日志的优先等级以下(从上到下依次递增)加密

    public enum LogLevel
    {
        // 含有最详细的日志数据,其中可能含有程序的一些敏感数据,该选项默认是被禁用的,且生产环境中绝对不要开启
        // (太多,太敏感),之因此默认禁用在于appsettings.json中最低级别是Information
        Trace = 0,
        //调试用的一些数据
        Debug = 1,
        // 用于跟踪程序一般的流程数据,这些日志是一些长期的数据。 
        Information = 2,
        // 须要引发重视的日志数据,不会致使程序崩溃
        Warning = 3,
        //发生了错误,但不会致使程序大范围崩溃
        Error = 4,       
        // 严重且致命的错误
        Critical = 5,
        // 不是用来记录日志的. 一般用于设置默认值
        None = 6
    }  

3.配置文件的读取

 1)ASP.NET Core的Host采用appsettings.json做为配置文件,具体的值是多少受优先级的影响(看第一段)spa

 2)Startup类中Host自动经过构造注入的方式提供了Configuration的值,Configuration读取方式介绍以下命令行

ASP.NET Core中默认采用了Microsoft.Extensions.Configuration.Json做为配置解析器(publish一下就看到了里面有它)调试

{
  "Id": "123",
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "UserList": [
    {
      "Name": "Name1"
    },
    {
      "Name": "Name2"
    },
    {
      "Name": "Name3"
    }
  ]
}

3.经过Key进行读取

Configuration["Id"]; //  123
Configuration["Logging:IncludeScopes"]; //  false
Configuration["Logging:LogLevel:Default"]; // Debug
Configuration["UserList:0:Name"]; // Name1

上面这些值都是string类型的,咱们能够经过GetValue来获取指定类型的值

 

 以下

Configuration.GetValue<int>("Id"); // int类型的123
Configuration.GetValue<bool>("Logging:IncludeScopes"); // bool 类型 false
Configuration.GetValue<string>("Logging:LogLevel:Default"); // string 类型 Debug
Configuration.GetValue<string>("UserList:0:Name"); // string 类型 Name1

 

4.经过POCO(纯C#对象)类来获取配置信息(这里以Get方法为例)

public class Poco
{
    public int Id { get; set; }
    public LoggingPoco Logging { get; set; }
    public List<User> UserList { get; set; }
    public class User
    {
        public string Name { get; set; }
    }
}
public class LoggingPoco
{
    public bool IncludeScopes { get; set; }
    public LogLevelPoco LogLevel { get; set; }
}
public class LogLevelPoco
{
    public string Default { get; set; }
    public string System { get; set; }
    public string Microsoft { get; set; }
}
var detailLogging = Configuration.GetSection("Logging").Get<LoggingPoco>();

  

获取整个配置文件的配置信息

var allConfig = Configuration.Get<Poco>();

获取指定节点下的配置内容

var logging = Configuration.GetSection("Logging").Get<LoggingPoco>();

 

说说优先级最高的配置(命令行方式)

前文所述,命令行具备优先级最高的配置权力,命令行传入A的值的方式:

//core特有的传入方式,没有引号就会因空格截断

dotnet  app.dll  /A="Value in CMD"  

//传统的方式,没有引号就会因空格截断
dotnet  app.dll  --A "Value in CMD"  

 

环境变量的传值方式

环境变量的等级仅次于命令行,另外windows当前用户的环境变量有限等级高于系统环境变量,windows环境变量可能重启后才能生效;

主要的应用场景在于docker等

 

内存性配置方式

主要用于加密保护一些敏感配置数据.

相关文章
相关标签/搜索