当前位置: 首页 > news >正文

.NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例

在本文中,我们将详细介绍.NET Core日志内容,包括不同日志级别的区别,以及一些常用的日志记录实用工具和第三方库。同时,我们还将通过示例来展示如何使用这些工具和库。

一、.NET Core日志级别

.NET Core日志系统提供了五种日志级别,分别如下:

  1. Trace:跟踪级别用于详细诊断信息,通常只在诊断问题时启用。
  2. Debug:调试级别用于应用程序的调试信息,通常在开发过程中使用。
  3. Information:信息级别用于常规信息性消息,表示应用程序运行正常。
  4. Warning:警告级别用于表示某些意外事件的提示,但是应用程序仍然可以正常运行。
  5. Error:错误级别用于表示应用程序中的错误,导致应用程序无法正常运行。
  6. Critical:关键级别用于表示严重错误,可能导致应用程序崩溃。

在.NET Core中,可以通过配置日志级别来控制输出哪些级别的日志信息。以下是一个简单的示例,演示如何配置和使用.NET Core的日志记录系统。
首先,创建一个新的.NET Core Web API项目。在项目目录中,打开appsettings.json文件,添加以下日志配置:

{"Logging": {"LogLevel": {"Microsoft": "Warning","System": "Warning","MyApp": "Information"}}
}

在这个配置中,我们设置了三个日志级别:

  • 对于Microsoft和System命名空间,日志级别设置为Warning。
  • 对于MyApp命名空间,日志级别设置为Information。
    接下来,创建一个简单的日志记录器类,用于输出日志信息。在项目中添加一个新的类LoggingService.cs,内容如下:
using Microsoft.Extensions.Logging;
using System;
public class LoggingService : ILogger<LoggingService>
{public IDisposable BeginScope<TState>(TState state){return null;}public bool IsEnabled(LogLevel logLevel){return true;}public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter){if (logLevel >= LogLevel.Information){Console.WriteLine($"{logLevel}: {formatter(state, exception)}");}}
}

在这个类中,我们重写了ILogger接口的方法,以实现日志记录的功能。
现在,我们可以在应用程序中使用这个日志记录器。首先,需要在Startup.cs文件中注册日志记录器:

public void ConfigureServices(IServiceCollection services)
{services.AddSingleton<ILogger<LoggingService>>(sp =>new LoggingService());
}

接下来,在控制器中使用这个日志记录器输出不同级别的日志信息:

[ApiController]
[Route("[controller]")]
public class ValuesController : ControllerBase
{private readonly ILogger<ValuesController> _logger;public ValuesController(ILogger<ValuesController> logger){_logger = logger;}[HttpGet]public IEnumerable<string> Get(){_logger.LogVerbose("Verbose log message");_logger.LogDebug("Debug log message");_logger.LogInformation("Information log message");_logger.LogWarning("Warning log message");_logger.LogError("Error log message");_logger.LogCritical("Critical log message");return new string[] { "value1", "value2" };}
}

在这个示例中,我们创建了一个ValuesController控制器,其中包含了多个不同的HTTP GET方法。在每个方法中,我们使用_logger对象输出了不同级别的日志信息。根据我们之前的配置,Verbose和Debug级别的日志信息将不会输出,因为它们的级别低于配置的Warning级别。

运行应用程序,访问http://localhost:5000/values,你可以在控制台中看到输出的日志信息。其中,只有Information、Warning、Error和Critical级别的日志信息会被输出。
通过使用了几个不同的日志级别,包括LogDebug(调试级别,通常不会在生产环境中显示)、LogInformation(信息级别)、LogWarning(警告级别)、LogError(错误级别)和LogCritical(严重级别)输出不同等级日志信息。

注意,LogDebug调用实际上不会输出任何内容,因为我们没有在配置中启用调试日志。在生产环境中,通常不会启用调试日志,因为它们可能会包含敏感信息。

二、日志记录实用工具

2.1Serilog

Serilog是一个高度可配置的日志记录库,用于替代内置的日志记录系统。它提供了丰富的功能,如日志旋转、输出到不同的目的地(控制台、文件、数据库等)、结构化日志等。
安装Serilog

dotnet add package Serilog

示例:

public class Program
{public static void Main(string[] args){Log.Logger = new LoggerConfiguration().Enrich.FromLogContext().WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}").CreateLogger();try{Log.Information("Starting application");// 业务逻辑}catch (Exception ex){Log.Error(ex, "An error occurred");}Log.CloseAndFlush();}
}

2.2 Log4Net

Log4Net是另一个常用的日志记录工具,它基于Apache Log4j2。Log4Net提供了丰富的配置选项,如日志源、日志应用ender、日志过滤器等。
安装Log4Net:

dotnet add package log4net

示例:

public class Program
{private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);public static void Main(string[] args){log.Info("Starting application");// 业务逻辑log.Error("An error occurred");}
}

三、第三方库

3.1 ELK Stack

ELK Stack是由Elasticsearch、Logstash和Kibana组成的日志聚合平台。通过使用ELK Stack,可以将日志数据索引到Elasticsearch中,并通过Kibana进行可视化展示。
安装ELK Stack:

  • Elasticsearch:dotnet add package Elasticsearch.Net
  • Logstash:使用Logstash管道处理日志数据,并将数据发送到Elasticsearch。
  • Kibana:使用Kibana进行日志数据的可视化展示。
    示例:
using Elasticsearch.Net;
public class Program
{public static void Main(string[] args){var settings = new ConnectionSettings(new Uri("http://localhost:9200")));var client = new ElasticClient(settings);var log = new LoggerConfiguration().Enrich.FromLogContext().WriteTo.Elasticsearch(client, new ElasticsearchSinkOptions(){IndexFormat = "logstash-{0:yyyy.MM.dd}"}).CreateLogger();Log.Information("Starting application");// 业务逻辑Log.Error("An error occurred");}
}

3.2 MySQL、SQL Server等数据库

除了ELK Stack,你还可以将日志存储到MySQL、SQL Server等数据库中。这通常需要使用第三方库,如MySqlConnector、Microsoft.EntityFrameworkCore等。
安装MySqlConnector:

dotnet add package MySqlConnector

示例:

using MySql.Data.MySqlClient;public class Program
{private readonly ILogger _logger;public Program(){var connectionString = "your_connection_string_here";var options = new MySqlSinkOptions{TableName = "Logs",ColumnOptions = new Dictionary<string, ColumnOptions>{{ "Level", new ColumnOptions { IsNullable = false } },{ "Message", new ColumnOptions { IsNullable = false } },{ "Exception", new ColumnOptions { IsNullable = true } },{ "Source", new ColumnOptions { IsNullable = false } },{ "Scope", new ColumnOptions { IsNullable = true } },{ "Timestamp", new ColumnOptions{DataType = "DATETIME",IsNullable = false}}}};_logger = new LoggerConfiguration().Enrich.FromLogContext().WriteTo.MySql(connectionString, options).CreateLogger();}public void Main(){try{_logger.Information("Starting application");// 业务逻辑}catch (Exception ex){_logger.Error(ex, "An error occurred");}}
}

在这个示例中,我们使用了Serilog的WriteTo.MySql扩展方法来配置日志输出到MySQL数据库。我们为日志表定义了列和数据类型,并指定了列是否可以为空。

四、总结

本文详细介绍了.NET Core日志级别,以及如何使用一些常用的日志记录实用工具和第三方库,如Serilog、Log4Net、ELK Stack和MySQL。通过这些工具和库,你可以更加灵活地记录、存储和分析应用程序的日志,从而提高应用程序的可靠性和可维护性。希望本文能对你有所帮助!

http://www.lryc.cn/news/312551.html

相关文章:

  • Vue开发实例(七)Axios的安装与使用
  • 2024.3.6
  • 抖音视频批量采集软件|视频评论下载工具
  • 苹果 Vision Pro零售部件成本价格分析
  • Seurat 中的数据可视化方法
  • ImportError: cannot import name ‘InterpolationMode‘
  • HSRP和VRRP
  • C及C++每日练习(1)
  • Oracle 12c dataguard查看主备库同步情况的新变化
  • 时间序列-AR MA ARIMA
  • Spring Boot(六十六):集成Alibaba Druid 连接池
  • leetcode 经典题目42.接雨水
  • 高防服务器的主要作用有哪些?
  • 【30 天 JavaScript 挑战】学习笔记
  • 生成 Linux/ubuntu/Debian 上已安装软件包的列表
  • 精品中国货出海wordpress外贸独立站建站模板
  • 使用Animated.View实现全屏页面可以向下拖动,松开手指页面返回原处的效果
  • 【教程】uni-app iOS打包解决profile文件与私钥证书不匹配问题
  • 预约自习室
  • 网络安全审计是什么意思?与等保测评有什么区别?
  • HarmonyOS学习——HarmonyOS习题
  • Python程序怎么让鼠标键盘在后台进行点击,不干扰用户其他鼠标键盘操作
  • HTML静态网页成品作业(HTML+CSS)——新年春节介绍网页设计制作(3个页面)
  • vue实现base64格式转换为图片
  • 【杂言】迟到的 2024 展望
  • 结构体(C语言进阶)(一)
  • 【react】对React Router的理解?常用的Router 组件有哪些
  • 生成式 AI
  • 云计算 3月6号 (crontab-计划任务 日志轮转 免密登录)
  • Windows Shell命令详解:入门指南