zoukankan      html  css  js  c++  java
  • 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");
            }
        }
  • 相关阅读:
    chrome中打开 swf下载的问题
    爱对人比爱上人更重要
    ActiveMQ集群
    ActiveMQ相关API
    ActiveMQ持久化
    ActiveMQ处理模式
    ActiveMQ
    JMS与消息队列
    微服务设计、拆分原则
    web常用服务架构
  • 原文地址:https://www.cnblogs.com/xiaojidanbai/p/14227423.html
Copyright © 2011-2022 走看看