.NET 7(C#)配置使用log4net日志框架的方法

log4net 是一个高效、灵活且广泛使用的日志记录库,专门用于 .NET 框架。它是 Apache 的一个开源项目Apache log4j框架在Microsoft .NET平台的实现。log4net 旨在提供一个简单、易用但功能强大的日志系统。本文主要介绍.NET 7 中配置使用log4net,以及相关示例代码。

1、安装引用log4net

使用log4net需要安装引用log4net,若是 ASP.NET Core 项目,则需要安装 Microsoft.Extensions.Logging.Log4Net.AspNetCore

1)log4net

在Nuget管理程序中,搜索 "log4net",然后点击安装。

2)Microsoft.Extensions.Logging.Log4Net.AspNetCore

在Nuget管理程序中,搜索 "Microsoft.Extensions.Logging.Log4Net.AspNetCore",然后点击安装。

2、log4net 配置文件

log4net 中配置文件可以使用XML格式的, 具体如下,

1)配置说明

配置项

类型

描述

rollingAppender

log4net.Appender.RollingFileAppender

滚动文件记录器,

用于将日志写入文件。

file

String

日志文件的路径和名称。

appendToFile

Boolean

是否追加内容到现有文件。

lockingModel

log4net.Appender.FileAppender+MinimalLock

文件锁定模型,

用于多线程环境。

rollingStyle

Composite

滚动文件的样式,

如按大小或日期。

datePattern

String

备份文件的日期格式。

maxSizeRollBackups

Int

最大备份文件数量。

maximumFileSize

String

单个文件的最大大小。

staticLogFileName

Boolean

是否使用静态日志文件名。

filter

log4net.Filter.LevelRangeFilter

日志级别范围过滤器。

layout

log4net.Layout.PatternLayout

日志的布局格式。

AdoNetAppender_SqlServer

log4net.Appender.AdoNetAppender

用于将日志写入SQL Server的记录器。

bufferSize

Int

缓冲区大小,

控制写入数据库的频率。

connectionType

String

数据库连接的类型。

connectionString

String

数据库连接字符串。

commandText

String

写入数据库的SQL命令文本。

priority

String

根记录器的优先级。

level

String

根记录器的日志级别。

appender-ref

String

引用的记录器名称。

2)Appender

类型

描述

log4net.Appender.AdoNetAppender

使用准备好的语句或存储过程将日志记录事件写入数据库。

log4net.Appender.AnsiColorTerminalAppender

将颜色突出显示的日志事件写入 ANSI 终端窗口。

log4net.Appender.AspNetTraceAppender

将日志记录事件写入 ASP 跟踪上下文。

然后可以在 ASP 页的末尾或在 ASP 跟踪页上呈现这些。

log4net.Appender.BufferingForwardingAppender

在将事件转发给子附加程序之前缓冲记录事件。

log4net.Appender.ColoredConsoleAppender

将日志记录事件写入应用程序的控制台。

事件可能会进入标准我们的流或标准错误流。

事件可能具有为每个级别定义的可配置文本和背景颜色。

log4net.Appender.ConsoleAppender

将日志记录事件写入应用程序的控制台。

事件可能会进入标准我们的流或标准错误流。

log4net.Appender.DebugAppender

将日志事件写入 .NET 系统。

log4net.Appender.EventLogAppender

将日志记录事件写入 Windows 事件日志。

log4net.Appender.FileAppender

将日志记录事件写入文件系统中的文件。

log4net.Appender.ForwardingAppender

将日志记录事件转发给子附加程序。

log4net.Appender.LocalSyslogAppender

将日志记录事件写入本地 syslog 服务(仅限 UNIX)。

log4net.Appender.MemoryAppender

将日志记录事件存储在内存缓冲区中。

log4net.Appender.NetSendAppender

将日志事件写入 Windows Messenger 服务。

这些消息显示在用户终端的对话框中。

log4net.Appender.OutputDebugStringAppender

将日志记录事件写入调试器。如果应用程序没有调试器,

系统调试器会显示该字符串。

如果应用程序没有调试器并且系统调试器未激活,

则忽略该消息。

log4net.Appender.RemoteSyslogAppender

使用 UDP 网络将日志记录事件写入远程系统日志服务。

log4net.Appender.RemotingAppender

使用 .NET 远程处理将日志记录事件写入远程接收器。

log4net.Appender.RollingFileAppender

将日志记录事件写入文件系统中的文件。

RollingFileAppender 可以配置为根据日期

或文件大小限制记录到多个文件。

log4net.Appender.SmtpAppender

将日志记录事件发送到电子邮件地址。

log4net.Appender.SmtpPickupDirAppender

将 SMTP 消息作为文件写入拾取目录。

然后可以通过 SMTP 代理

(例如 IIS SMTP 代理)读取和发送这些文件。

log4net.Appender.TelnetAppender

客户端通过 Telnet 连接以接收日志记录事件。

log4net.Appender.TraceAppender

将日志记录事件写入 .NET 跟踪系统。

log4net.Appender.UdpAppender

使用 UdpClient 将日志事件作为

无连接 UDP 数据报发送到远程主机或多播组。

3)log4net.Appender.RollingFileAppender

<?xml version="1.0" encoding="utf-8"?>
<log4net><appender name="rollingAppender" type="log4net.Appender.RollingFileAppender"><file value="log4\app.log" /><appendToFile value="true" /><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><!-- 可以为:Once|Size|Date|Composite --><!-- Composite为Size和Date的组合 --><rollingStyle value="Composite" /><!-- 当备份文件时,为文件名加的后缀 --><datePattern value="yyyyMMdd.TXT" /><!-- 日志最大个数,都是最新的 --><!-- rollingStyle节点为Size时,只能有value个日志 --><!-- rollingStyle节点为Composite时,每天有value个日志 --><maxSizeRollBackups value="20" /><!-- 可用的单位:KB|MB|GB --><maximumFileSize value="3MB" /><!-- true时当前最新日志文件名永远为file配置项中的名字 --><staticLogFileName value="true" /><!-- 输出级别的日志 --><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="ALL" /><param name="LevelMax" value="FATAL" /></filter><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/></layout><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/></layout></appender><root><!-- 控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF --><!-- OFF:0 --><!-- FATAL:FATAL --><!-- ERROR: ERROR,FATAL --><!-- WARN: WARN,ERROR,FATAL --><!-- INFO: INFO,WARN,ERROR,FATAL --><!-- DEBUG: INFO,WARN,ERROR,FATAL --><!-- ALL: DEBUG,INFO,WARN,ERROR,FATAL --><priority value="ALL"/><level value="INFO"/><appender-ref ref="rollingAppender" /></root>
</log4net>

2)log4net.Appender.ConsoleAppender

<?xml version="1.0" encoding="utf-8"?>
<log4net><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><root><!-- 控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF --><!-- OFF:0 --><!-- FATAL:FATAL --><!-- ERROR: ERROR,FATAL --><!-- WARN: WARN,ERROR,FATAL --><!-- INFO: INFO,WARN,ERROR,FATAL --><!-- DEBUG: INFO,WARN,ERROR,FATAL --><!-- ALL: DEBUG,INFO,WARN,ERROR,FATAL --><priority value="ALL"/><level value="INFO"/><appender-ref ref="ConsoleAppender" /></root>
</log4net>

3)log4net.Appender.SmtpAppender

<?xml version="1.0" encoding="utf-8"?>
<log4net><appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"><to value="to@example.com" /><from value="from@example.com" /><subject value="Log4Net Error" /><smtpHost value="smtp.example.com" /><bufferSize value="512" /><lossy value="false" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><root><!-- 控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF --><!-- OFF:0 --><!-- FATAL:FATAL --><!-- ERROR: ERROR,FATAL --><!-- WARN: WARN,ERROR,FATAL --><!-- INFO: INFO,WARN,ERROR,FATAL --><!-- DEBUG: INFO,WARN,ERROR,FATAL --><!-- ALL: DEBUG,INFO,WARN,ERROR,FATAL --><priority value="ALL"/><level value="INFO"/><appender-ref ref="log4net.Appender.SmtpAppender" /></root>
</log4net>

3、log4net配置及使用示例

下面是log4net的配置文件配置及使用,如下,

using Microsoft.OpenApi.Models;using NLog.Web;var builder = WebApplication.CreateBuilder(args);// 配置log4netbuilder.Logging.AddLog4Net("log4net.Config");
builder.Services.AddControllers();app.UseDefaultFiles();
app.UseStaticFiles();
app.MapControllers();app.Run();

使用示例:

using Microsoft.AspNetCore.Mvc;
using UtilityWeb.API.Services;
using UtilityWeb.Core;using UtilityWeb.Tools;namespace UtilityWeb.API.Controllers
{[ApiController][Route("[controller]")]public class WeatherForecastController : ControllerBase{private static readonly string[] Summaries = new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"};private readonly ILogger<WeatherForecastController> _logger;public WeatherForecastController(ILogger<WeatherForecastController> logger){_logger = logger;}[HttpGet(Name = "GetWeatherForecast")]public IEnumerable<string> Get([FromServices] UtilityWebContext context,[FromServices] IUser userService,[FromServices] SwaggerService swaggerService){_logger.LogError("error message");return new List<string>() { _logger.ToString() };}}
}

4、log4net 与NLog 对比

特性

NLog

log4net

性能

在高性能场景下表现更好,

特别是异步日志记录方面。

性能稳定,

但可能在某些高性能需求下逊色于NLog。

配置

灵活和动态的配置选项,

支持代码配置和外部文件配置。

通常基于 XML 文件配置,

功能强大但可能复杂。

扩展性

提供良好的支持,

易于添加自定义逻辑。

支持自定义扩展,

但可能不如NLog直观。

API

更现代和易于使用。

功能强大但可能对初学者较复杂。

文档

拥有广泛的文档和社区支持。

长期的用户基础,

但更新和社区活跃度可能不如NLog。

特性

支持结构化日志、

条件日志记录等高级功能。

提供丰富的日志记录功能,

但在现代日志需求上可能不够灵活。

成熟度

较新,但已稳定且不断更新。

较早开发的日志库,

具有更成熟的特性。

推荐

需要高性能、现代化API

或特定高级功能。

项目已使用log4net

或需要稳定且经过验证的解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/227574.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】八、查找

一、基本概念 静态查找&#xff1a;只查找&#xff0c;不改变集合内数据元素 动态查找&#xff1a;有则输出元素&#xff0c;无则添加元素 二、静态查找表 2.1顺序查找 在线性表、链表、树中依次查找 2.2折半查找&#xff08;二分查找&#xff09; 在有序的线性表中&…

基于轻量级GhostNet模型开发构建生活场景下生活垃圾图像识别系统

轻量级识别模型在我们前面的博文中已经有过很多实践了&#xff0c;感兴趣的话可以自行移步阅读&#xff1a; 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》 《基…

【Java JVM】Java 实例对象的访问定位

Java 程序会通过栈上的 reference 数据来操作堆上的具体对象。 但是 reference 类型在《Java虚拟机规范》里面只规定了它是一个指向对象的引用, 并没有定义这个引用应该通过什么方式去定位, 访问到堆中对象的具体位置, 所以对象访问方式也是由虚拟机实现而定的&#xff0c;主流…

深入探索小红书笔记详情API:解锁内容创新的无尽潜力

一、引言 在当今信息爆炸的时代&#xff0c;内容创新已经成为品牌和个人脱颖而出的关键。小红书&#xff0c;作为全球最大的消费类口碑库之一&#xff0c;每天产生大量的用户生成内容。而小红书笔记详情API&#xff0c;作为一个强大的工具&#xff0c;能够为内容创作者提供深入…

UG装配-添加组件

添加组件命令位置在如下位置&#xff1a;菜单-装配-组件-添加组件 添加组件命令位置在如下位置&#xff1a;菜单-装配-组件-添加组件

Java关键字(1)

Java中的关键字是指被编程语言保留用于特定用途的单词。这些关键字不能用作变量名或标识符。以下是Java中的一些关键字&#xff1a; public&#xff1a;表示公共的&#xff0c;可以被任何类访问。 private&#xff1a;表示私有的&#xff0c;只能被定义该关键字的类访问。 cl…

060:vue中markdown编辑器mavon-editor的应用示例

第060个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

(学习打卡1)重学Java设计模式之设计模式介绍

前言&#xff1a;听说有本很牛的关于Java设计模式的书——重学Java设计模式&#xff0c;然后买了(*^▽^*) 开始跟着小傅哥学Java设计模式吧&#xff0c;本文主要记录笔者的学习笔记和心得。 打卡&#xff01;打卡&#xff01; 设计模式介绍 一、设计模式是什么&#xff1f; …

2023年03月17日_微软和谷歌办公AI的感慨

2023年3月17日 最近这个科技圈的消息 有点爆炸的让人应接不暇了 各种大公司简直就是神仙打架 你从来没有见过这么密集的 这么高频的产品发布 昨天微软是发布了Office 365 Copilot 在里边提供了大量的AI的功能 然后谷歌呢也发布了这个Google Workspace AI 也是跟365 Cop…

据报道,微软的下一代 Surface 笔记本电脑将是其首款真正的“人工智能 PC”

明年&#xff0c;微软计划推出 Surface Laptop 6和 Surface Pro 10&#xff0c;这两款设备将提供 Arm 和 Intel 两种处理器选项。不愿意透露姓名的不透露姓名人士透露&#xff0c;这些新设备将引入先进的人工智能功能&#xff0c;包括配备下一代神经处理单元 (NPU)。据悉&#…

uniapp打包Android、Ios、微信小程序

首先我们需要在我们的代码中&#xff0c;把我们所要用到的配置信息配置好&#xff0c;在检查一下我们测试的内容是否有打开&#xff08;取消注释&#xff09;&#xff0c;在检查一下我们的版本信息是否正确&#xff0c;查看一下接口ip是否是正式线 这里的配置信息一定要配置好…

SpringBoot整合Canal

一 linux docker compose版本 1.第一步&#xff1a;基础环境 &#xff08;1&#xff09;第1步&#xff1a;安装jak、maven、git、nodejs、npm yum install maven mvn -v 安装maven时会帮安装jdkyum install git git --version 2.27.0yum in…

【Echarts】使用echarts和echarts-wordcloud生成词云图

一、下载echarts和echarts-wordcloud 地址&#xff1a;https://download.csdn.net/download/qq_25285531/88663006 可直接下载放在项目中使用 二、词云数据 词云数据是对象的格式&#xff0c;可以从后端获取&#xff0c;这里以下面数据为例 $list3 array(array(name >…

【C语言】分支与循环语句

什么是语句&#xff1f; C语句可分为以下五类&#xff1a; 表达式语句函数调用语句控制语句 &#xff08;本篇重点介绍&#xff09;复合语句空语句 控制语句用于控制程序的执行流程&#xff0c;以实现程序的各种结构方式。C语言支持三种结构&#xff1a; 顺序结构选择结构循…

【JavaScript】new原理解析

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

汇编语言指令系列

目录 &#xff08;一&#xff09;七大寻址方式 ① 立即寻址&#xff1a; ② 寄存器寻址&#xff1a; ③ 直接寻址&#xff1a; ④ 寄存器间接寻址&#xff1a; ⑤ 变指寻址&#xff1a; ⑥ 相对寻址&#xff1a; ⑦ 位寻址&#xff1a; &#xff08;二&#xff09;重要…

分类模型评估方法

1.数据集划分 1.1 为什么要划分数据集? 思考&#xff1a;我们有以下场景&#xff1a; 将所有的数据都作为训练数据&#xff0c;训练出一个模型直接上线预测 每当得到一个新的数据&#xff0c;则计算新数据到训练数据的距离&#xff0c;预测得到新数据的类别 存在问题&…

冒泡排序--------(C每日一题)

冒泡排序&#xff1a; 每次将相邻的两个数比较,将小的调到前头--升序 冒泡排序一个结论&#xff1a; n个数要进行n-1轮比较&#xff0c;第j轮要进行n-j次两两比较 循环体代码&#xff1a; int main() {int i, j,n,a[10],t;//n是几个数比较for(j1;j<n-1;j)//控制轮次for…

Bluetooth Mesh 入门学习干货,参考Nordic资料(更新中)

蓝牙网状网络&#xff08;Bluetooth mesh&#xff09;概念 概述 蓝牙Mesh Profile | Bluetooth Technology Website规范&#xff08;Mesh v1.1 后改名Mesh ProtocolMesh Protocol | Bluetooth Technology WebsiteMesh Protocol&#xff09;是由蓝牙技术联盟(Bluetooth SIG)开…

力扣刷题总结 栈与队列

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 一、栈和队列的基础知识 队列是先进先出&#xff0c;栈是先进后出。同时二者都是容器适配器而不是容器。 二、题目实战 232.用栈…