.Net 6 WebApi项目中使用Log4Net详解

server/2024/12/22 6:29:56/

众所周知as we know, log4Net是一个很方便的日志输出工具,但是,每次使用,日志都没有顺利输出过.....各种不知名问题.......所以就记录一下,方便下次使用。

具体的与原理和基础在此不做赘述,咱直接上干货,在项目中如何使用。

1、引用

首先安装log4Net和Microsoft.Extensions.Logging.Log4Net.AspNetCore,可以根据自己的喜好使用命令或者Nugget安装都可以。

2、添加配置文件log4net.config

新建一个log4net.config文件,一般会直接放在程序主目录下,并在属性中设置为“始终复制”或“如果较新则复制”

<?xml version="1.0" encoding="utf-8"?>
<log4net><!--根配置--><root><!--日志级别:可选值: ERROR > WARN > INFO > DEBUG --><level value="ERROR"/><level value="WARN"/><level value="INFO"/><level value="DEBUG"/><appender-ref ref="ErrorLog" /><appender-ref ref="WarnLog" /><appender-ref ref="InfoLog" /><appender-ref ref="DebugLog" /></root><!-- 错误 Error.log--><appender name="ErrorLog" type="log4net.Appender.RollingFileAppender"><!--目录路径,可以是相对路径或绝对路径--><param name="File" value="Log\Error\"/><!--文件名,按日期生成文件夹--><param name="DatePattern" value="yyyy-MM-dd"/><!--追加到文件--><appendToFile value="true"/><!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--><rollingStyle value="Composite"/><!--写到一个文件--><staticLogFileName value="false"/><!--单个文件大小。单位:KB|MB|GB--><maximumFileSize value="200MB"/><!--最多保留的文件数,设为"-1"则不限--><maxSizeRollBackups value="-1"/><!--日志格式--><layout type="log4net.Layout.PatternLayout"><conversionPattern value="[%d{HH:mm:ss}]%m%n"/></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="ERROR" /><param name="LevelMax" value="ERROR" /></filter></appender><!-- 警告 Warn.log--><appender name="WarnLog" type="log4net.Appender.RollingFileAppender"><!--目录路径,可以是相对路径或绝对路径--><param name="File" value="Log\Warn\"/><!--文件名,按日期生成文件夹--><param name="DatePattern" value="yyyy-MM-dd"/><!--追加到文件--><appendToFile value="true"/><!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--><rollingStyle value="Composite"/><!--写到一个文件--><staticLogFileName value="false"/><!--单个文件大小。单位:KB|MB|GB--><maximumFileSize value="200MB"/><!--最多保留的文件数,设为"-1"则不限--><maxSizeRollBackups value="-1"/><!--日志格式--><layout type="log4net.Layout.PatternLayout"><conversionPattern value="[%d{HH:mm:ss}]%m%n"/></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="WARN" /><param name="LevelMax" value="WARN" /></filter></appender><!-- 信息 Info.log--><appender name="InfoLog" type="log4net.Appender.RollingFileAppender"><!--目录路径,可以是相对路径或绝对路径--><param name="File" value="Log\Info\"/><!--文件名,按日期生成文件夹--><param name="DatePattern" value="yyyy-MM-dd"/><!--追加到文件--><appendToFile value="true"/><!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--><rollingStyle value="Composite"/><!--写到一个文件--><staticLogFileName value="false"/><!--单个文件大小。单位:KB|MB|GB--><maximumFileSize value="200MB"/><!--最多保留的文件数,设为"-1"则不限--><maxSizeRollBackups value="-1"/><!--日志格式--><layout type="log4net.Layout.PatternLayout"><conversionPattern value="[%d{HH:mm:ss}]%m%n"/></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="INFO" /><param name="LevelMax" value="INFO" /></filter></appender><!-- 调试 Debug.log--><appender name="DebugLog" type="log4net.Appender.RollingFileAppender"><!--目录路径,可以是相对路径或绝对路径--><param name="File" value="Log\Debug\"/><!--文件名,按日期生成文件夹--><param name="DatePattern" value="yyyy-MM-dd"/><!--追加到文件--><appendToFile value="true"/><!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--><rollingStyle value="Composite"/><!--写到一个文件--><staticLogFileName value="false"/><!--单个文件大小。单位:KB|MB|GB--><maximumFileSize value="200MB"/><!--最多保留的文件数,设为"-1"则不限--><maxSizeRollBackups value="-1"/><!--日志格式--><layout type="log4net.Layout.PatternLayout"><conversionPattern value="[%d{HH:mm:ss}]%m%n"/></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="DEBUG" /><param name="LevelMax" value="DEBUG" /></filter></appender>
</log4net>
3、配置

在Program.cs中添加配置,有两种方式添加配置,

其一:builder.Logging.AddLog4Net("log4net.config");

其二:

//注入日志
builder.Services.AddLogging(config =>
{
    config.AddLog4Net();
}
);
 

4、使用,

使用方式也有两种,通过依赖注入的方式和直接载入的方式。

依赖注入的方式:

在Controller中的构造方法内注入的方式引入,示例代码如下:

[Route("api/[controller]/[action]")][ApiController]public class TestController : ControllerBase{ILogger<TestController> _logger;public TestController(ILogger<TestController> logger){_logger = logger;}[HttpGet]public string GetMsg(string msg){_logger.LogInformation($"测试日志输出-- {DateTime.Now.ToString()}:{msg}");return msg;}}

直接载入的方式:

直接通过LogManager获取log,示例代码如下:

[Route("api/[controller]/[action]")][ApiController]public class TestController : ControllerBase{//InfoLog 为log4net.config中配置的appender节点的名称private static ILog _log = log4net.LogManager.GetLogger("InfoLog"); //ILogger<TestController> _logger;//public TestController(ILogger<TestController> logger)//{//    _logger = logger;//}[HttpGet]public string GetMsg(string msg){_log.Info($"-- {DateTime.Now.ToString()}:{msg}");_log.Error($"-- {DateTime.Now.ToString()}:{msg}");return msg;}


http://www.ppmy.cn/server/104908.html

相关文章

PHP在现代Web开发中的高效应用与实战案例

在快速迭代的Web开发领域&#xff0c;PHP作为一种成熟且广泛使用的服务器端脚本语言&#xff0c;始终占据着举足轻重的地位。从简单的动态网页到复杂的企业级应用&#xff0c;PHP凭借其强大的功能、丰富的扩展库以及良好的社区支持&#xff0c;成为了众多开发者的首选。本文将深…

下载bison操作步骤

bison官网链接 bison-3.8.2官网源代码下载链接 选择下载版本

2024 实训室建设:1+X 老年生活照护实训室

摘要&#xff1a;本文探讨了 2024 年 1X 老年生活照护实训室的建设意义、设计理念、功能布局以及对老年照护人才培养的积极作用&#xff0c;旨在为提升老年生活照护水平提供有力的实践教学支持。 随着我国老龄化进程的加速&#xff0c;对高质量老年生活照护的需求日益增长。202…

小白学习c++P10【2065】整数的和(c++)详细讲解

目录 EXTRA## PT1-知识点引入&#x1f929; PT2-首次接触程序&#x1f4a6; PT3-知识点讲解&#x1f36e; PT4-有没有其他方法&#xff1f;&#x1f62f; PT5-课后小结&#x1f606; EXTRA## &#xff08;此专栏为连续剧形式&#xff0c;如出现看不懂等情况请回顾之前的文…

C语言--不可不学的指针

1. 指针是什么 内存是什么&#xff1f; 内存是电脑上特别重要的存储器&#xff0c;计算机中的程序的运行都是在内存中进行的&#xff0c;为了有效使用内存&#xff0c;我们会把内存划分为一个个小的内存单元&#xff0c;比如把4G/8G/16G/32G的内存划分为一个个以字节为单位的空…

ant design pro 的表分层级如何处理

ant design pro 如何去保存颜色ant design pro v6 如何做好角色管理ant design 的 tree 如何作为角色中的权限选择之一ant design 的 tree 如何作为角色中的权限选择之二ant design pro access.ts 是如何控制多角色的权限的ant design pro 中用户的表单如何控制多个角色ant des…

STM32(五):定时器——输出比较

定时器输出比较功能&#xff1a;输出PWM波形 OC&#xff08;Output Compare&#xff09;输出比较 输出比较可以通过比较CNT与CCR寄存器值的关系&#xff0c;来对输出电平进行置1、置0或翻转的操作&#xff0c;用于输出一定频率和占空比的PWM波形。 每个高级定时器和通用定时器…

玻璃钢一体化预制泵站的设计原则

诸城市鑫淼环保小编带大家了解一下玻璃钢一体化预制泵站的设计原则 1、总体布置应合理&#xff0c;特别是排灌结合或自排、自引与提水相结合的泵站以及闸站结合的&#xff0c;在布置上应力求紧凑&#xff0c;充分利用建筑物进行调节。 2、在泵型的选择上应力求使设计扬程与水泵…