asp.net core-配置

配置文件的使用

asp.net core中默认配置文件是appsettings.json,可以通过IConfiguration来获取,IConfiguration可以从startup的构造函数通过DI获取

这边有3种方式来使用appsettings.json里面的配置,该配置不区分大小写

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Information"
    }
  },
  "AllowedHosts": "*"
}

1.直接使用字符串,冒号表示下一层级

var default= configuration["Logging:LogLevel:Default"];

2. 绑定配置模型对象

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //绑定配置模型对象
    var appSetting = new AppSetting();
    _configuration.Bind(appSetting);

    // 部分绑定
    var logging = new LogLevel();
    _configuration.GetSection("logging").Bind(logging);

    app.Run(async context =>
    {
        var a = appOptions.Logging.LogLevel.Default;
        var b = logging.LogLevel.Default;
    }
}

3. 通过注册服务

根据配置结构定义相关model,类似于ORM映射

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<AppSetting>(_configuration);
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IOptions<AppSetting> appOptions)
{
    app.Run(async context =>
    {
        var a = appOptions.Logging.LogLevel.Default;
    }
}

假如需要使用其他配置文件,比如添加了一个test.config配置文件,这个config就可以跟IConfiguration一样用了

public void ConfigureServices(IServiceCollection services)
{
    var config = new ConfigurationBuilder().AddJsonFile("test.json").Build();
}

NLog和Log4Net的使用

asp.net core内置了日志组件,可以在控制台,页面输出信息,但是不支持写入文件,所以我们需要使用第三方的日志组件。

NLog和Log4Net是两款比较常用的日志组件,他们是专门用于.net的,实现了.net的内置接口,这意味着你可以像调用.net内置日志组件一样调用它。

首先介绍下日志个级别,从低到高如下

     //
    // Summary:
    //     Defines logging severity levels.
    public enum LogLevel
    {
        //
        // Summary:
        //     Logs that contain the most detailed messages. These messages may contain sensitive
        //     application data. These messages are disabled by default and should never be
        //     enabled in a production environment.
        Trace = 0,
        //
        // Summary:
        //     Logs that are used for interactive investigation during development. These logs
        //     should primarily contain information useful for debugging and have no long-term
        //     value.
        Debug = 1,
        //
        // Summary:
        //     Logs that track the general flow of the application. These logs should have long-term
        //     value.
        Information = 2,
        //
        // Summary:
        //     Logs that highlight an abnormal or unexpected event in the application flow,
        //     but do not otherwise cause the application execution to stop.
        Warning = 3,
        //
        // Summary:
        //     Logs that highlight when the current flow of execution is stopped due to a failure.
        //     These should indicate a failure in the current activity, not an application-wide
        //     failure.
        Error = 4,
        //
        // Summary:
        //     Logs that describe an unrecoverable application or system crash, or a catastrophic
        //     failure that requires immediate attention.
        Critical = 5,
        //
        // Summary:
        //     Not used for writing log messages. Specifies that a logging category should not
        //     write any messages.
        None = 6
    }

Nlog使用

首先nuget添加相应的包,.net core下需要NLog包,假如需要在asp.net core下,还需要下载另一个NLog.Web.AspNetCore包。

然后添加配置文件nlog.config,直接从官网获取就行,有一点要注意官网的路径是来划分,但是linux下只能用/才能定位。所以我们统一改成/,这样windows和linux下都能使用

<?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="${basedir}/logs/internal-nlog.txt">

  <!-- enable asp.net core layout renderers -->
  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>

  <!-- the targets to write to -->
  <targets async="true">
    <!-- write logs to file  -->
    <target xsi:type="File" name="allfile" fileName="${basedir}/logs/nlog-all-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />

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

  </targets>

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

    <!--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>

然后在构造函数中通过DI获取ILogger<类名> logger,在哪个类里面使用,就把相应的类名添加到<>中。

使用就更简单了,使用logger.LogInformation等方法,每个方法对应了日志记录等级

log4Net用法

Nuget添加log4net库,

然后添加log4net.config,名字无所谓

<log4net>
    <logger name="ApplicationLogger">
        <level value="INFO" />
        <appender-ref ref="Application" />
        <appender-ref ref="Debug" />
    </logger>
    <appender name="Application" type="log4net.Appender.RollingFileAppender">
        <file type="log4net.Util.PatternString" value="logsApplication" />
        <appendToFile value="true" />
        <rollingStyle value="date" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="10MB" />
        <staticLogFileName value="false" />
        <datePattern value="yyyyMMdd'.log'"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date - [%-10level] - [%-20sourceType] - %message%newline" />
        </layout>
    </appender>
    <appender name="Debug" type="log4net.Appender.DebugAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date - [%-10level] - [%-20sourceType] - %message%newline" />
        </layout>
    </appender>
</log4net>

将log4net.config的属性改成始终复制,意思是这个配置文件始终会复制到文件夹中

 使用如下

    class Program
    {
        static void Main(string[] args)
        {
            ILoggerRepository repository = LogManager.CreateRepository("myLogRepository");
            XmlConfigurator.Configure(repository, new FileInfo("log4net.Config"));
            ILog log = LogManager.GetLogger(repository.Name, "ApplicationLogger");
            log.Info("ffffffffffffffff");
        }
    }
原文地址:https://www.cnblogs.com/xiaojidanbai/p/14227423.html