ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

<二>asp.netcore 配置文件与日志

2022-04-26 20:32:13  阅读:198  来源: 互联网

标签:asp 配置文件 netcore public Setting ILogger logger configuration 日志


一、配置文件

ASP.NET Core支持多种不同的配置选项。建议在应用程序的program类中只实例化一个Configuration实例,然后使用选择模式来访问各自的设置。
Configuration需要配置一个数据源,使得Configuration能正常工作。一般使用json格式的文件作为数据源,比如:appsetting.json

ConfigurationBuilder builder = new ConfigurationBuilder();
            var config = builder.AddJsonFile("demo.json", optional: false).Build();
config.GetSection("Setting");
{
    "Setting": {
        "Url": "http://localhost:8080/",
        "Name": "localhost"
    }
}

1、使用配置文件参数的方法构造函数注入

public IConfiguration _configuration { get; set; }
public TestController(IConfiguration configuration)
{
  _configuration = configuration;
}
/// <summary>
/// 方式一:直接读取单个值
/// </summary>
public void GetConfig()
{
  var url = _configuration["Setting:Url"];
  var url2 = _configuration.GetValue<string>("Setting:Url"); 
  var url3=_configuration.GetSection("Setting").GetSection("Url").Value; 
}

2、统一设置配置类

/// <summary>
/// 统一将json格式转成配置类
/// </summary>
public static class AppSettings
{
    public static SettingClass settingClass { get; set; }
    public static void Init(IConfiguration configuration)
    {
    // 将Setting模块绑定到Json模块的Setting类
        settingClass = new SettingClass();
        configuration.Bind("Setting", settingClass);
    }
}    
/// <summary>
///配置模型类
/// </summary>
public class Setting
{
  /// <summary>
  /// url
  /// </summary>
  public string Url { get; set; }
  /// <summary>
  /// 名称
  /// </summary>
  public string Name { get; set; }
}
// program入口调用此方法完成统一配置类的设置
AppSettings.Init(Configuration);
public void GetConfig()
{
    var url = AppSettings.setting.Url; 
    var name = AppSettings.setting.Name; 
}

二、日志记录

1.日志三要素

  • Logger:是写日志的对象
  • LoggerFactory:是创建Logger对象的工厂
  • LoggerProvider:决定日志写入目的地的对象

2.日志输出的四个方向

  • 控制台(Console):引入 Microsoft.Extensions.Logging.Console  
  • 调试(Debug) :引入 Microsoft.Extensions.Logging.Debug
  • 事件日志(EventLog)
  • TraceSource:引入 System.Diagnostics.TraceSource

3.创建logger对象的基本流程。下例子代码中,向logger工厂中指定了两个输出方向,然后再创建logger。那么这个logger就只会往这个两个目的地写日志。

 ILoggerFactory loggerFactory = new LoggerFactory();
 loggerFactory.AddProvider(new ConsoleLoggerProvider(filter,false));
 loggerFactory.AddProvider(new DebugLoggerProvider(filter));
 ILogger logger = loggerFactory.CreateLogger("指定名");

4.asp.netcore在创建主机的时候已经默认了创建了指定所有方向的LoggerFactory,所以如果没有特殊的要求,可以直接使用依赖注入

private readonly ILogger<Todocontroller> _logger;
public Todocontroller (ILogger<TodoController> logger)
    _logger - logger;
)
var logger = loggerFactory.createLogger ( "catchall" );

5.日志记录级别

当应用程序添加一条日志记录时,必须指定日志级别。日志级别允许你控制应用程序输出日志的详细程度,以及把不同类型的日志传送给不同的日志记录器。

  • Trace:用于记录最详细的日志消息,通常仅用于开发阶段调试问题。这些消息可能包含敏感的应用程序数据,因此不建议用于生产环境,默认应禁用。
  • Debug:这种消息在开发阶段短期内比较有用。它们包含一些可能会对调试有所助益、但没有长期价值的信息。默认情况下这是最详细的日志。
  • Information:这种消息被用于跟踪应用程序的一般流程。与 Verbose级别的消息相反,这些日志应该有一定的长期价值。
  • Warning:当应用程序出现错误或其他不会导致程序停止的流程异常或意外事件时,应使用警告级别,以供日后调查。建议在一个通用的地方处理警告级别的异常。
  • Error:当应用程序由于某些故障停止工作时,则需要记录错误日志。这些消息应该指明当前活动或操作(比如当前的HTTP请求),而不是应用程序范围的故障。
  • Critical:当应用程序或系统崩溃、遇到灾难性故障,需要立即被关注时,应当记录关键级别的日志。例如,数据丢失、磁盘空间不够等。

 6.日志模型

由于ILogger只定义了一个Log方法来写日志,但是日志级别有很多种,每次写log都要指定这么多的参数,非常不方便,这样就引入了日志模型。

   public interface ILogger
   {
       void Log(LogLevel logLevel, EventId eventId, object state, Exception exception, Func<object, Exception, string> formatter);
       bool IsEnabled(LogLevel logLevel);
       IDisposable BeginScope<TState>(TState state); 
   }

日志模型的Logger泛指所有实现了ILogger接口的所有类型以及对应对象,该接口定义在NuGet包“Microsoft.Extensions.Logging.Abstractions”中。

一条写入的日志消息会关联着一个日志记录事件,记录事件通过一个EventId对象来标识,Log方法的eventId参数类型就是EventId。它具有两个基本的属性Id和Name。

 public struct EventId
 {
     public int        Id { get; }
     public string     Name{ get; }
     public EventId(int id, string name = null);
     public static implicit operator EventId(int i);
 }

根据日志消息采用的等级,日志模型还为ILogger接口定义了一系列针对不同日志等级的扩展方法

  • LogTrace
  • LogDebug
  • LogInformation
  • LogWarning
  • LogError
  • LogCritical

7.日志模型的使用

public class Todocontroller : controller
{
  ILogger<Todocontroller> _logger;   public Todocontroller (ILogger<Todocontroller> logger)   {_logger - logger;}   public IEnumerable<TodoItem>GetAll(){     _logger.LogInformation(LoggingEvents.xx,"items" );   }
}
var logger = loggerFactory.createLogger ("message") ;
logger.LogInformation ( "message") ;

 

标签:asp,配置文件,netcore,public,Setting,ILogger,logger,configuration,日志
来源: https://www.cnblogs.com/choii/p/16191675.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有