zoukankan      html  css  js  c++  java
  • 《ASP.NET Core 高性能系列》关于.NET Core的配置信息的若干事项

    1.配置文件的相关闲话

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

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

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

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

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

    2.日志配置的问题

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

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

        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作为配置文件,具体的值是多少受优先级的影响(看第一段)

     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"  
    dotnet  app.dll  A="Value in CMD"  

     

    环境变量的传值方式

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

    主要的应用场景在于docker等

    内存性配置方式

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

  • 相关阅读:
    【EmguCv】人脸/人眼检测
    iOS 9下Universal Link(通用链接)开发
    【JavaWeb】SpringMvc返回json
    【nlp】湖北师范大学贴吧帖子标题词频统计
    【C#】EAN-13条形码生成与识别
    【C#】身份证识别(三):身份证信息识别
    【C#】身份证识别(二):提取目标区域图像
    米勒罗宾素性测试算法简介+模板(转)
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/humble/p/12264440.html
Copyright © 2011-2022 走看看