如何在 ASP.NET Core 3.1 应用程序中使用 Log4Net

介绍

日志记录是应用程序的核心。它对于调试和故障排除以及应用程序的流畅性非常重要。

借助日志记录,我们可以对本地系统进行端到端的可视性,而对于基于云的系统,我们只能提供一小部分可视性。您可以将日志写入磁盘或数据库中的文件,并发送错误电子邮件。

为 Log4Net 安装 NuGet 包

要使用 Log4Net 日志记录,首先需要添加 Log4Net 插件。要添加插件,您可以通过两种不同的方式进行。

  1. 管理 NuGet 包。
  2. NuGet 命令。

您可以在下面找到 Log4Net 所需的 NuGet 命令。

PM> Install-Package log4net -Version 2.0.8

或者,您可以 Microsoft.Extensions.Logging.Log4Net.AspNetCore

更新启动文件

我们需要将Log4Net中间件注册到启动配置部分,如下所示:

public void Configure(IApplicationBuilder app,

IHostingEnvironment env, ILoggerFactory loggerFactory)

{

loggerFactory.AddLog4Net();

}

添加 log4net.config 文件

我们需要点击"添加新"来向您的项目添加一个名为log4net.config的文件。

请参阅以下 log4net.config 代码日志文件。

<log4net>

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">

<lockingmodel type="log4net.Appender.FileAppender+MinimalLock">

<file value="logs/">

<datepattern value="yyyy-MM-dd hh.'txt'">

<staticlogfilename value="false">

<appendtofile value="true">

<rollingstyle value="Composite">

<maxsizerollbackups value="2">

<maximumfilesize value="15MB">

<layout type="log4net.Layout.PatternLayout">

<conversionpattern value="%level %message %date">

</conversionpattern></layout>

</maximumfilesize></maxsizerollbackups></rollingstyle></appendtofile></staticlogfilename></datepattern></file></lockingmodel></appender>

<root>

<level value="ALL">

<appender-ref ref="RollingLogFileAppender">

</appender-ref></level></root>

</log4net>

Root 在 log4net.config 中是必需的,我们可以在其中定义日志级别和 appender-ref 来定义附加程序。例如 - FileAppender、ConsoleAppender。

<root>

<level value="ALL">

<appender-ref ref="RollingLogFileAppender">

</appender-ref></level></root>

布局
在布局中,我们可以定义自定义参数,如下所示。

<layout type="log4net.Layout.PatternLayout">

<conversionpattern value="%level %message %date">

</conversionpattern></layout>

日志级别

共有 7 个日志记录级别。

  • 关闭-不记录任何内容(无法调用)
  • 致命的
  • 错误
  • 警告
  • 信息
  • 调试
  • ALL-所有内容都会被记录(无法调用)

不同的 Appender

  • 滚动文件附加器 - 它写入输出窗口或命令窗口。
  • 文件附加器-此附加器将写入文本文件。
  • ADO.NET Appender-此附加器将写入数据库。
  • 控制台附加器 - 此附加器执行与文件附加器相同的功能,但附加了仅在启动新日志文件之前存储一定量数据的选项。

Log4Net 的日志管理器

public static class Logger

{

private static readonly string LOG_CONFIG_FILE = @"log4net.config";

private static readonly log4net.ILog _log = GetLogger(typeof(Logger));

public static ILog GetLogger(Type type)

{

return LogManager.GetLogger(type);

}

public static void Debug(object message)

{

SetLog4NetConfiguration();

_log.Debug(message);

}

private static void SetLog4NetConfiguration()

{

XmlDocument log4netConfig = new XmlDocument();

log4netConfig.Load(File.OpenRead(LOG_CONFIG_FILE));

var repo = LogManager.CreateRepository(

Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));

log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);

}

}

加载并读取 Log4Net 配置文件

您需要将配置文件命名为程序集名称,并且需要具有您指定的扩展名。以下是示例。

Private static void SetLog4NetConfiguration()

{

XmlDocument log4netConfig = new XmlDocument();

log4netConfig.Load(File.OpenRead(LOG_CONFIG_FILE));

var repo = LogManager.CreateRepository(

Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));

log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);

}

参考开源地址:GitHub - huorswords/Microsoft.Extensions.Logging.Log4Net.AspNetCore: Allows to configure Log4net as Microsoft Extensions Logging handler on any ASP.NET Core application. Original code proposal by @anuraj --> https://dotnetthoughts.net/how-to-use-log4net-with-aspnetcore-for-logging/

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
_Evan_Yao3 分钟前
从“全量发布”到“小步快跑”:灰度发布的简单实践与学习路径
java·后端·学习
石小石Orz30 分钟前
给Claude增加状态栏显示:claude-hud保姆级教程
前端·人工智能·后端
折哥的程序人生 · 物流技术专研32 分钟前
《Java 100 天进阶之路》第21篇:Java Object类
java·开发语言·后端·面试·哈希算法
喵个咪1 小时前
Kratos + WebRTC 实战:实现浏览器 P2P 音视频通话与实时数据通信
后端·微服务·webrtc
Gopher_HBo1 小时前
GoFrameMap转换详解
后端
小江的记录本1 小时前
【MySQL】《MySQL日志面试背诵版+思维导图》(核心考点 + MySQL 8.0最新优化)
java·数据库·后端·python·sql·mysql·面试
yoyo_zzm1 小时前
PHP vs Java:后端语言终极选择指南
java·spring boot·后端·架构·php
苏三说技术1 小时前
从索引失效到性能翻倍,DBA不愿透露的10个优化技巧
后端
神奇小汤圆2 小时前
Java AI 框架选型:LangChain4j 还是 Spring AI?
后端
Moment2 小时前
刷 Reddit 1 小时没结果?我用这个方法 10 秒挖出真实需求
前端·javascript·后端