【.NET Core】應用配置,多環境,日誌NLog

目錄

應用配置

讀取配置

綁定配置模型對象方式

通過配置文件名讀取配置

多環境

方法多環境

Startup多環境

日誌

使用NLog

下載

配置

修改配置

使用


應用配置

應用配置信息一般存在appsettings.json文件中

添加一些配置信息

{
  "str": "aaa",
  "People": {
    "Name": "haha",
    "Age": 18
  }
}

在Startup中,通過依賴注入給IConfiguration注入服務

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public IConfiguration Configuration { get; }

讀取配置

 var str = Configuration["str"];
 var name = Configuration["People:Name"];

綁定配置模型對象方式

新建模型

public class People
{
    public string Name { get; set; }
    public int Age { get; set; }
}

將配置信息綁定到People對象p中

var p = new People();
Configuration.Bind("People", p);

 

另外一種綁定模型的方式,通過添加服務的方式

在Startup的ConfigureServices方法,配置服務

services.Configure<People>(Configuration.GetSection("People"));

然後在其他地方就可以通過注入方式獲取了

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IOptions<People> peopleOptions)
{
    string name = peopleOptions.Value.Name;
}

上面是在controller的注入方式,下面介紹view的注入方式

通過@inject注入

@using Microsoft.Extensions.Options
@inject IOptions<People> peopleOptions

使用

@peopleOptions.Value.Name

 

通過配置文件名讀取配置

var config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var str = config["str"];

 

多環境

方法多環境

可以在Properties的launchSetting.json文件中修改配置

將Development修改爲Demo

然後在Startup中添加一個新的方法,與ConfigureServices類型的,起名爲ConfigureDemoServices

public void ConfigureDemoServices(IServiceCollection services)
{
    
}

這樣我們使用IIS Express啓動時,則執行ConfigureDemoServices方法

同樣的,我們也可以模仿上面的,添加類似Configure方法的ConfigureDemo

Startup多環境

定義一個StartuoDemo的類

public class StartupDemo
{
    public IConfiguration Configuration { get; }
    public StartupDemo(IConfiguration configuration)
    {
        Configuration = configuration;
    }
}

修改Program的CreateHostBuilder方法

讓其自動尋找指定程序集下對於的Startup類

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup(System.Reflection.Assembly.GetExecutingAssembly().FullName);
            //webBuilder.UseStartup<Startup>();
        });

 

日誌

.NET Core 的日誌配置默認只是添加到Console和Debug中

 

使用NLog

官網地址: https://nlog-project.org/

GitHub地址:https://github.com/NLog/NLog

 

下載

在NuGet下載NLog和NLog.Web.AspNetCore

添加一個配置文件nlog.config

參考官方文檔:https://github.com/NLog/NLog/wiki/Configuration-file

配置

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Info"
      internalLogFile="c:\temp\internal-nlog.txt">

  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>

  <targets>
    <!-- write logs to file  -->
    <target name="defaultlog" xsi:type="File" keepFileOpen="false" encoding="utf-8"
        fileName="${basedir}/logs/${level}/${shortdate}.log"
        layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />

    <!-- another file log, only own logs. Uses some ASP.NET core renderers -->
    <target xsi:type="File" name="ownFile-web" fileName="${basedir}/logs/${level}/nlog-own-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
  </targets>

  <!-- rules to map from logger name to target -->
  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="trace" writeTo="defaultlog" />

    <!--Skip non-critical Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" maxlevel="Info" final="true" />
    <!-- BlackHole without writeTo -->
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
  </rules>

</nlog>

修改配置

修改Program文件

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        }).UseNLog();

使用

public HomeController(ILogger<HomeController> logger)
{
    logger.LogInformation("aaaa");
}

日誌

在項目下的bin\Debug\netcoreapp3.1\logs

 

 

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