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

环境变量的传值方式

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

主要的应用场景在于docker等

内存性配置方式

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

原文地址:https://www.cnblogs.com/humble/p/12264440.html

时间: 2024-09-27 19:55:41

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

《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!

原文:<ASP.NET Core 高性能系列>致敬伟大的.NET斗士甲骨文! 写在开始 三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击, 现在可以致敬伟大的.NET斗士甲骨文了 (JDK8以上都需要收费,Android弃用java作为第一语言,别高兴:OpenJDK是甲骨文的). <ASP.NET Core 高性能系列>是一套如何编写高性能Web应用技术系列文章, 我们将从.NET 2开始全面升入.其中我们会

《ASP.NET Core 高性能系列》静态文件中间件

原文:<ASP.NET Core 高性能系列>静态文件中间件 一.概述 静态文件(如 HTML.CSS.图片和 JavaScript等文件)是 Web程序直接提供给客户端的直接加载的文件. 较比于程序动态交互的代码而言,其实原理都一样(走Http协议), ASP.NET Core中需要进行一些配置才能提供这些文件. 二.wwwroot 静态文件存储在项目的 Web 程序的 {ContentRoot}/wwwroot目录下,但可通过 UseWebRoot 方法更改路径 . Web 应用程序项目的

《ASP.NET Core 高性能系列》环境(EnvironmentName)的设置

原文:<ASP.NET Core 高性能系列>环境(EnvironmentName)的设置 一.概述 程序启动时Host捕获到环境相关数据,然后交由IEnvironment(传说要作废,但是觉得这个设计依旧前后矛盾,因为没有考虑好非Web 和Web区分),然后交由IWebHostEnvironment,对于ASP.NET Core环境而言,同样会存储在 IWebHostEnvironment.EnvironmentName,ASP.NET Core框架自身提供Development.Stagi

《ASP.NET Core 高性能系列》关于.NET Core的部署方式

概述,.NET Core应用程序可以创建三种类型的部署:FDD SCD FDE 框架依赖的部署(FDD).顾名思义,框架依赖的部署(FDD)依赖于目标系统上是否存在.NET Core版本.由于.NET Core已经存在,因此您的应用程序在不同的.NET Core版本中进行移植.您的应用程序仅包含其自己的代码以及.NET Core库之外的任何第三方依赖项.FDD包含.dll文件,可以通过使用dotnet命令行启动这些文件. 例如,dotnet app.dll运行名为的应用程序app. 自包含的部署

《ASP.NET Core 高性能系列》ASP.NET Core的启动过程(1)

一.一切从头开始 简述:知道事情的真相就应该从头 开始,下面我们代码先行 public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWeb

《ASP.NET Core 高性能系列》关于性能的闲聊

一.通常的性能问题类型 让我们一起看看那些公共的性能问题,看看他们是或者不是.我们将了解到为什么我们常常在开发期间会错过这些问题.我们也会看看当我们考虑性能时语言的选择.延迟.带宽.计算等因素. 二.语言的考虑 人们经常关注所使用的编程语言的速度.然而,这经常没有抓住要点.这是一个非常简单的观点,掩盖了技术选择的细微差别,用任何语言编写速度慢的软件都很容易.由于当今计算机的处理速度非常强大,所以解释性能相对较慢的语言通常足够快,而开发中性能的提高是值得的.要理解所涉及的论点和权衡是很重要的,即使

《ASP.NET Core 高性能系列》Span&lt;T&gt;和Memory&lt;T&gt;

一.Span<T>概述 原文:Provides a type- and memory-safe representation of a contiguous region of arbitrary memory. 中文的翻译不准确,这里给出比较厚道的翻译:提供类型T安全.连续的内存区域的表达方式. (图1:Span<T>定义,不是全图) 这里出现高阶语法 readonly ref struct,下面是msdn给的语言规范(或者其核心意义),估计大家会看晕, Span<T>

Core Data系列译文:Core Data概述

在"伯乐在线"发现了一篇很不错的关于CoreData的文章,只是那里不能收藏,故而转载至此 以下是文章原文: 本文由 伯乐在线 - IvyShao 翻译自 Daniel Eggert.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. [2013-11-19 21:24:26 伯乐在线补充]:由于之前和译者@shaojingkk 沟通不够,我们在发布这篇译文之前并不知道译者参考对照@answer-huang 之前的译文版本,所以发布文章时未能在文中特别说明,责任在我们,在此向@answ

.NET CORE学习系列(1) ——.NET Core是什么?与.NET Framework、Mono之间的关系 ?

一.概念: .NET Core 是一个开源的.跨平台的 .NET 实现.而 .NET Framework 是基于 Windows 的 .NET 实现,Mono 是 .NET Framework 的一个开源.跨平台的实现. .NET Core 分为两大块:1).NET Core Framework,2).NET Core Runtime. 二.关系: 在.NET Core推出之后,.NET Framework与Mono将基于.NET Core重新构建..NET Framework将成为.NET C