《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等

 

內存性配置方式

主要用於加密保護一些敏感配置數據.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章