.NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
在本文中,我们将详细介绍.NET Core日志内容,包括不同日志级别的区别,以及一些常用的日志记录实用工具和第三方库。同时,我们还将通过示例来展示如何使用这些工具和库。
一、.NET Core日志级别
.NET Core日志系统提供了五种日志级别,分别如下:
- Trace:跟踪级别用于详细诊断信息,通常只在诊断问题时启用。
- Debug:调试级别用于应用程序的调试信息,通常在开发过程中使用。
- Information:信息级别用于常规信息性消息,表示应用程序运行正常。
- Warning:警告级别用于表示某些意外事件的提示,但是应用程序仍然可以正常运行。
- Error:错误级别用于表示应用程序中的错误,导致应用程序无法正常运行。
- 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。通过这些工具和库,你可以更加灵活地记录、存储和分析应用程序的日志,从而提高应用程序的可靠性和可维护性。希望本文能对你有所帮助!
相关文章:
.NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
在本文中,我们将详细介绍.NET Core日志内容,包括不同日志级别的区别,以及一些常用的日志记录实用工具和第三方库。同时,我们还将通过示例来展示如何使用这些工具和库。 一、.NET Core日志级别 .NET Core日志系统提供了五种日志级…...
Vue开发实例(七)Axios的安装与使用
说明: 如果只是在前端,axios常常需要结合mockjs使用,如果是前后端分离,就需要调用对应的接口,获取参数,传递参数;由于此文章只涉及前端,所以我们需要结合mockjs使用;由于…...
2024.3.6
作业1:使用C语言完成数据库的增删改 #include <myhead.h>//定义添加员工信息函数 int Add_worker(sqlite3 *ppDb) {//准备sql语句printf("请输入要添加的员工信息:\n");//从终端获取员工信息char rbuf[128]"";fgets(rbuf,sizeof(rbuf),s…...
抖音视频批量采集软件|视频评论下载工具
在日常工作中,需要频繁下载抖音视频,但逐个复制分享链接下载效率太低?别担心!我们推出了一款专业的抖音视频批量采集软件,基于C#开发,满足您的需求,让您通过关键词搜索视频并自动批量抓取&#…...
苹果 Vision Pro零售部件成本价格分析
苹果公司发布的全新头戴式显示器 Apple Vision Pro 虽然售价高达3499美元,但其制造成本同样不菲,根据研究机构 Omdia 的估计,该头显仅零部件成本就超过了1500美元。这款头显的总零部件成本估计为1542美元,这还并不包括研发、包装、…...
Seurat 中的数据可视化方法
本文[1]将使用从 2,700 PBMC 教程计算的 Seurat 对象来演示 Seurat 中的可视化技术。您可以从 SeuratData[2] 下载此数据集。 SeuratData::InstallData("pbmc3k")library(Seurat)library(SeuratData)library(ggplot2)library(patchwork)pbmc3k.final <- LoadData(…...
ImportError: cannot import name ‘InterpolationMode‘
InterpolationMode 在图像处理库中通常用于指定图像缩放时的插值方法。插值是一种数学方法,在图像大小变化时用于估算新像素位置的像素值。不同的插值方法会影响缩放后图像的质量和外观。 在你提供的 image_transform 函数中,InterpolationMode.BICUBIC…...
HSRP和VRRP
VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议) 是一种网络层的容错协议,主要用于在多台路由器之间提供默认网关冗余。在IP网络中,当一个子网有多个路由器时,VRRP可以确保在主用路由器失效…...
C及C++每日练习(1)
一.选择: 1.以下for循环的执行次数是() for(int x 0, y 0; (y 123) && (x < 4); x); A.是无限循环 B.循环次数不定 C.4次 D.3次 对于循环,其组成部分可以四个部分: for(初始化;循环进行条件;调整) …...
Oracle 12c dataguard查看主备库同步情况的新变化
导读 本文介绍Oracle 12c dataguard在维护方面的新变化 前提:主库备库的同步是正常的。 1、主库上查看archive Log list SYScdb1> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination…...
时间序列-AR MA ARIMA
一、AR模型(自回归) AR探索趋势和周期性 预测依赖于过去的观测值和模型中的参数。模型的阶数 p pp 决定了需要考虑多少个过去时间点的观测值。 求AR模型的阶数 p和参数 ϕ i \phi_i ϕi ,常常会使用统计方法如最小二乘法、信息准则(如AIC、BIC…...
Spring Boot(六十六):集成Alibaba Druid 连接池
1 Alibaba Druid介绍 在现代的Java应用中,使用一个高效可靠的数据源是至关重要的。Druid连接池作为一款强大的数据库连接池,提供了丰富的监控和管理功能,成为很多Java项目的首选。本文将详细介绍如何在Spring Boot项目中配置数据源,集成Druid连接池,以实现更高效的数据库…...
leetcode 经典题目42.接雨水
链接:https://leetcode.cn/problems/trapping-rain-water 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 思路分析 首先,我们需要遍历数组,对于每个元素&am…...
高防服务器的主要作用有哪些?
高防服务器是属于服务器的一种,主要是为了解决流量攻击而设计的,高防服务器能够维护服务器的稳定性和安全性,具备很高的防御能力和更加优质的网络带宽,能够提供更加可靠的服务保障,那么高防服务器主要都有哪些作用呢&a…...
【30 天 JavaScript 挑战】学习笔记
30 天 JavaScript 挑战 专为 JavaScript 初学者设计 掌握必备 JavaScript 技能 前端人,前端魂,刷完 JS 即入门! 题目地址:https://leetcode.cn/studyplan/30-days-of-javascript/ 个人学习笔记:https://github.com/kaimo313/…...
生成 Linux/ubuntu/Debian 上已安装软件包的列表
你可以在终端中使用以下命令生成已安装软件包的列表: 列出所有已安装的软件包: dpkg --get-selections要将列表保存到文件中: dpkg -l > installed_packages_detailed.txt这将在当前目录中创建一个名为“installed_packages_detailed.txt”…...
精品中国货出海wordpress外贸独立站建站模板
旗袍唐装wordpress外贸网站模板 旗袍、唐装、华服wordpress外贸网站模板,适合做衣服生意的外贸公司官网使用。 https://www.jianzhanpress.com/?p3695 劳动防护wordpress外贸独立站模板 劳动防护wordpress外贸独立站模板,劳动保护、劳动防护用品外贸…...
使用Animated.View实现全屏页面可以向下拖动,松开手指页面返回原处的效果
使用Animated.View实现全屏页面可以向下拖动,松开手指页面返回原处的效果 效果示例图代码示例 效果示例图 代码示例 import React, {useRef, useState} from react; import {View,Text,Animated,Easing,PanResponder,StyleSheet, } from react-native;const TestDragCard () …...
【教程】uni-app iOS打包解决profile文件与私钥证书不匹配问题
摘要 当在uni-app中进行iOS打包时,有时会遇到profile文件与私钥证书不匹配的问题。本文将介绍如何解决这一问题,以及相关的技术细节和操作步骤。 引言 在uni-app开发过程中,iOS打包是一个常见的操作。然而,有时会出现profile文…...
预约自习室
预约自习室 1、技术介绍 自习室预约系统的后端开发语言采用Node,后端开发框架采用Express,数据库采用的Node的最佳搭档MySQL。采用Vue作为前端开发框架,Element-UI作为开发的组件库,微信小程序。期间采用axios实现网页数据获取&a…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
深度解析:etcd 在 Milvus 向量数据库中的关键作用
目录 🚀 深度解析:etcd 在 Milvus 向量数据库中的关键作用 💡 什么是 etcd? 🧠 Milvus 架构简介 📦 etcd 在 Milvus 中的核心作用 🔧 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...
欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!
多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...
Java设计模式:责任链模式
一、什么是责任链模式? 责任链模式(Chain of Responsibility Pattern) 是一种 行为型设计模式,它通过将请求沿着一条处理链传递,直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者,…...
