常见日志库NLog、log4net、Serilog和Microsoft.Extensions.Logging介绍和区别
在C#中,日志库的选择主要取决于项目的具体需求,包括性能、易用性、可扩展性等因素。以下是关于NLog、log4net、Serilog和Microsoft.Extensions.Logging的基本介绍和使用示例。
包含如何配置输出日志到当前目录下的log.txt文件及控制台的示例,以及输出到sqlite数据库
NLog
简介: NLog是一个灵活且易于使用的.NET日志记录库,支持多种输出目标(如文件、数据库、控制台等)和丰富的配置选项。
使用示例:
安装NLog NuGet包。
配置NLog.config文件。
<?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"><targets><target name="file" xsi:type="File" fileName="${basedir}/log.txt" /><target name="sqlite" xsi:type="Database"connectionString="Data Source=log.db;Mode=ReadWriteCreate;"commandText="INSERT INTO Log (TimeStamp, Level, Message) VALUES (@time_stamp, @level, @message)"><parameter name="@time_stamp" layout="${date:universalTime=true:format=yyyy-MM-dd HH\:mm\:ss.fff}" /><parameter name="@level" layout="${level}" /><parameter name="@message" layout="${message}" /></target><target name="console" xsi:type="Console" /></targets><rules><logger name="*" minLevel="Info" writeTo="file,sqlite,console" /></rules>
</nlog>
using NLog;class Program
{private static Logger logger = LogManager.GetCurrentClassLogger();static void Main(string[] args){logger.Info("这是一个信息日志");}
}
也可以设置时间 类型分开
<?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"throwConfigExceptions="true"internalLogLevel="Off"internalLogFile="C:\temp\internal-nlog.txt"><targets><!-- Trace级别日志,输出到文件 --><target xsi:type="File"name="TraceFile"fileName="${basedir}/logs/${shortdate}_Trace.log"layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /><!-- Debug级别日志,输出到文件 --><target xsi:type="File"name="DebugFile"fileName="${basedir}/logs/${shortdate}_Debug.log"layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /><!-- Info级别日志,输出到文件 --><target xsi:type="File"name="InfoFile"fileName="${basedir}/logs/${shortdate}_Info.log"layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /><!-- Warn级别日志,输出到文件 --><target xsi:type="File"name="WarnFile"fileName="${basedir}/logs/${shortdate}_Warn.log"layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /><!-- Error级别日志,输出到文件 --><target xsi:type="File"name="ErrorFile"fileName="${basedir}/logs/${shortdate}_Error.log"layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /><!-- Fatal级别日志,输出到文件 --><target xsi:type="File"name="FatalFile"fileName="${basedir}/logs/${shortdate}_Fatal.log"layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /></targets><rules><!-- Microsoft.*表示通配符,所有微软日志将被过滤 --><logger name="Microsoft.*" minlevel="Trace" final="true" /><logger name="*" minlevel="Trace" writeTo="TraceFile" /><logger name="*" minlevel="Debug" writeTo="DebugFile" /><logger name="*" minlevel="Info" writeTo="InfoFile" /><logger name="*" minlevel="Warn" writeTo="WarnFile" /><logger name="*" minlevel="Error" writeTo="ErrorFile" /><logger name="*" minlevel="Fatal" writeTo="FatalFile" /></rules>
</nlog>
另外还可以打印成html格式
<?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"throwConfigExceptions="true"internalLogLevel="Off"internalLogFile="C:\temp\internal-nlog.txt"><targets><!-- Trace级别日志,输出到html文件 --><target xsi:type="File"name="TraceFile"fileName="${basedir}/logs/${shortdate}_Trace.html"layout="【记录时间】:${longdate} <br>【文名名称】:${logger} <br>【日志级别】:${uppercase:${level}} <br>【日志内容】:${message} ${exception} <hr size=2 color=red>" /></targets><rules><!-- Microsoft.*表示通配符,所有微软日志将被过滤 --><logger name="Microsoft.*" minlevel="Trace" final="true" /><logger name="*" minlevel="Trace" writeTo="TraceFile" /></rules>
</nlog>
注意事项,将文件包含到项目中后要修改属性可复制
log4net
简介: log4net是另一个流行的日志库,源于Apache的log4j项目,支持多种日志级别、多种输出目的地和灵活的配置。
使用示例:
安装log4net NuGet包。
配置log4net配置节。
配置 (在App.config或Web.config内):
<log4net><!-- FileAppender和ConsoleAppender配置 --><appender name="FileAppender" type="log4net.Appender.FileAppender"><file value="log.txt" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date{ABSOLUTE} %level %logger - %message%newline" /></layout></appender><!-- SQLite Appender 配置示例 --><appender name="SQLiteAppender" type="log4net.Appender.AdoNetAppender"><bufferSize value="1" /><connectionType value="Microsoft.Data.Sqlite.SqliteConnection, Microsoft.Data.Sqlite" /><connectionString value="Data Source=log.db;Mode=ReadWriteCreate;" /><commandText value="INSERT INTO Log (TimeStamp, Level, Message) VALUES (@log_date, @log_level, @message)" /><parameter><parameterName value="@log_date" /><dbType value="DateTime" /><layout type="log4net.Layout.RawTimeStampLayout" /></parameter><parameter><parameterName value="@log_level" /><dbType value="String" /><size value="50" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%p" /></layout></parameter><parameter><parameterName value="@message" /><dbType value="String" /><size value="255" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%m" /></layout></parameter></appender><!-- 添加SQLiteAppender到root --><root><level value="INFO" /><appender-ref ref="FileAppender" /><appender-ref ref="ConsoleAppender" /><!-- 现有Appender参照 --><appender-ref ref="SQLiteAppender" /></root>
</log4net>
初始化并使用。
using log4net;
using log4net.Config;class Program
{private static readonly ILog log = LogManager.GetLogger(typeof(Program));static Program(){XmlConfigurator.Configure();}static void Main(string[] args){log.Info("这是一个信息日志");}
}
Serilog
简介: Serilog专注于结构化日志记录,特别适合现代应用,尤其是那些需要高效分析和搜索日志的应用。
使用示例:
安装Serilog及相应的sink包(如Serilog.Sinks.Console)。
配置Serilog。
using Serilog;class Program
{static void Main(string[] args){Log.Logger = new LoggerConfiguration().WriteTo.Console().CreateLogger();Log.Information("这是一个信息日志");}
}
Microsoft.Extensions.Logging
简介: 这是.NET Core及更高版本中提供的日志框架抽象层,不直接提供日志实现,但易于与其他日志库集成,如Serilog、NLog、log4net等。
使用示例:
安装Microsoft.Extensions.Logging NuGet包及具体日志库的Provider(如Serilog.AspNetCore)。
配置依赖注入。
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Serilog;class Program
{static void Main(string[] args){Log.Logger = new LoggerConfiguration().WriteTo.Console().CreateLogger();using var serviceScope = new ServiceCollection().AddLogging(loggingBuilder => loggingBuilder.AddSerilog(Log.Logger)).BuildServiceProvider().CreateScope();var logger = serviceScope.ServiceProvider.GetService<ILogger<Program>>();logger.LogInformation("这是一个信息日志");}
}
区别:
配置灵活性: NLog和log4net都支持详细的XML配置文件,适合复杂的日志策略。Serilog则通过代码配置,更加灵活,特别适合动态配置。Microsoft.Extensions.Logging作为一个抽象层,配置灵活性取决于所集成的具体日志库。
日志格式: Serilog强调结构化日志,便于机器解析和分析。其他库也支持结构化日志,但Serilog在这方面更为强大。
集成性: Microsoft.Extensions.Logging作为.NET Core推荐的日志抽象,易于与其他框架和服务集成,特别是ASP.NET Core应用。
性能: 性能差异可能因具体使用场景而异,但一般来说,Serilog在结构化日志输出时表现较好,而NLog和log4net在大规模日志处理时也有很好的性能表现。
选择哪个库,应考虑项目需求、团队熟悉度以及生态系统的兼容性。
相关文章:

常见日志库NLog、log4net、Serilog和Microsoft.Extensions.Logging介绍和区别
在C#中,日志库的选择主要取决于项目的具体需求,包括性能、易用性、可扩展性等因素。以下是关于NLog、log4net、Serilog和Microsoft.Extensions.Logging的基本介绍和使用示例。 包含如何配置输出日志到当前目录下的log.txt文件及控制台的示例,…...

【PX4-AutoPilot教程-TIPS】离线安装Flight Review PX4日志分析工具
离线安装Flight Review PX4日志分析工具 安装方法 安装方法 使用Flight Review在线分析日志,有时会因为网络原因无法使用。 使用离线安装的方式使用Flight Review,可以在无需网络的情况下使用Flight Review网页。 安装环境依赖。 sudo apt-get insta…...
探究Spring Boot自动配置的底层原理
在当今的软件开发领域,Spring Boot已经成为了构建Java应用程序的首选框架之一。它以其简单易用的特性和强大的功能而闻名,其中最引人注目的特性之一就是自动配置(Auto-Configuration)。Spring Boot的自动配置能够极大地简化开发人…...

Fedora40的#!bash #!/bin/bash #!/bin/env bash #!/usr/bin/bash #!/usr/bin/env bash
bash脚本开头可写成 #!/bin/bash , #!/bin/env bash , #!/usr/bin/bash , #!/usr/bin/env bash #!/bin/bash , #!/usr/bin/bash#!/bin/env bash , #!/usr/bin/env bash Fedora40Workstation版的 /bin 是 /usr/bin 的软链接, /sbin 是 /usr/sbin 的软链接, rootfedora:~# ll …...

重生之 SpringBoot3 入门保姆级学习(19、场景整合 CentOS7 Docker 的安装)
重生之 SpringBoot3 入门保姆级学习(19、场景整合 CentOS7 Docker 的安装) 6、场景整合6.1 Docker 6、场景整合 6.1 Docker 官网 https://docs.docker.com/查看自己的 CentOS配置 cat /etc/os-releaseStep 1: 安装必要的一些系统工具 sudo yum insta…...

cve_2014_3120-Elasticsearch-rce-vulfocus靶场
1.背景 来源:ElasticSearch(CVE-2014-3120)命令执行漏洞复现_mvel 漏洞-CSDN博客 参考:https://www.cnblogs.com/huangxiaosan/p/14398307.html 老版本ElasticSearch支持传入动态脚本(MVEL)来执行一些复…...

吴恩达2022机器学习专项课程C2W3:2.26 机器学习发展历程
目录 开发机器学习系统的过程开发机器学习案例1.问题描述2.创建监督学习算法3.解决问题4.小结 误差分析1.概述2.误差分析解决之前的问题3.小结 增加数据1.简述2.增加数据案例一3.增加数据案例二4.添加数据的技巧5.空白创建数据6.小结 迁移学习1.简述2.为什么迁移学习有作用3.小…...

当OpenHarmony遇上OpenEuler
1、 安装openEuler 虚拟机、物理机器当然都可以安装。虚拟机又可以使用WSL、或者VMWare、VirtualBox虚拟机软件,如果需要安装最新版本,建议使用后者。当前WSL只支持OpenEuler 20.03。 1.1 WSL openEuler WSL的安装都是程序员的必备技能了,…...

Apple - Framework Programming Guide
本文翻译自:Framework Programming Guide(更新日期:2013-09-17 https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Frameworks.html#//apple_ref/doc/uid/10000183i 文章目录 一、框架编程指南简介…...

R可视化:ggpubr包学习
欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者 Xiao hong书:生信学习者 知hu:生信学习者 CDSN:生信学习者2 介绍 ggpubr是我经常会用到的R包,它傻瓜式的画图方式对很多初次接触R绘图的人来…...
优化Spring Boot项目启动时间:详解与实践
目录 引言了解Spring Boot框架启动机制常见启动瓶颈分析优化策略 禁用不必要的自动配置使用Profile进行开发和生产环境区分精简依赖延迟加载Bean并行初始化Bean缓存数据源连接优化Spring Data JPA使用Spring Boot DevTools 通过性能测试工具分析和优化实战示例:一个…...

Android如何简单快速实现RecycleView的拖动重排序功能
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 要实现这个拖动重排序功能,主要是用到了RecycleView的ItemTouchHelper类 首先是定义一个接口 interface ItemTouchHelperAdapter …...

LabVIEW利用旋转编码器脉冲触发数据采集
利用旋转编码器发出的脉冲控制数据采集,可以采用硬件触发方式,以确保每个脉冲都能触发一次数据采集。本文提供了详细的解决方案,包括硬件连接、LabVIEW编程和触发设置,确保数据采集的准确性和实时性。 一、硬件连接 1. 旋转编码…...

Dubbo3 服务原生支持 http 访问,兼具高性能与易用性
作者:刘军 作为一款 rpc 框架,Dubbo 的优势是后端服务的高性能的通信、面向接口的易用性,而它带来的弊端则是 rpc 接口的测试与前端流量接入成本较高,我们需要专门的工具或协议转换才能实现后端服务调用。这个现状在 Dubbo3 中得…...

我在高职教STM32——GPIO入门之蜂鸣器
大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就…...

STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建
STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建 文章目录 STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建功能与作用典型工作流程 1. 硬件原理图介绍2. STM32 CubeMX工程搭建2.1 创建工程2.2 系统配置2.3 USART串口配…...
如果搜索一定超时,如何用dp来以空间换时间
E - Alphabet Tiles (atcoder.jp) 题目大意:1到k长度的字符串时,在A-Z给定数量下,搭配出多少种不同的字符串 思路 排列组合,会死人的 暴搜:可以解决,但是时间太长 dp:考虑前 i 个字母&…...

MySQL常见的命令
MySQL常见的命令 查看数据库(注意添加分号) show databases;进入到某个库 use 库; 例如:进入test use test;显示表格 show tables;直接展示某个库里面的表 show tables from 库; 例如:展示mysql中的表格 show tabl…...
11 类型泛化
11 类型泛化 1、函数模版1.1 前言1.2 函数模版1.3 隐式推断类型实参1.4 函数模板重载1.5 函数模板类型形参的默认类型(C11标准) 2、类模版2.1 类模板的成员函数延迟实例化2.2 类模板的静态成员2.3 类模板的递归实例化2.4 类模板类型形参缺省值 3、类模板…...

UE4_后期_ben_模糊和锐化滤镜
学习笔记,不喜勿喷,侵权立删,祝愿生活越来越好! 本篇教程主要介绍后期处理的简单模糊和锐化滤镜效果,学习之前首先要回顾下上节课介绍的屏幕扭曲效果: 这是全屏效果,然后又介绍了几种蒙版&#…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...