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

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

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

1、引用

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

2、添加配置文件log4net.config

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

cs 复制代码
<?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中的构造方法内注入的方式引入,示例代码如下:

cs 复制代码
    [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,示例代码如下:

cs 复制代码
    [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;
        }
相关推荐
唐青枫38 分钟前
C#.NET log4net 详解
c#·.net
ChaITSimpleLove12 小时前
使用 Dockerfile 构建基于 .NET9 的跨平台基础镜像
.net·dockerfile·.net aspire·dotnet-sdk·pwsh·docker image·docker buildx
专注VB编程开发20年17 小时前
C#,VB.NET从JSON数据里提取数组中的对象节点值
c#·json·.net
界面开发小八哥20 小时前
界面组件DevExpress WPF中文教程:Grid - 如何获取节点?
.net·wpf·界面控件·devexpress·ui开发
今晚打老虎z21 小时前
dotnet-env: .NET 开发者的环境变量加载工具
前端·chrome·.net
我是唐青枫1 天前
C#.NET NLog 详解
开发语言·c#·.net
一线码农1 天前
MinHook 如何对 .NET 母体 CoreCLR 进行拦截
c#·.net·代码注入
佛·追命1 天前
.net wpf混淆
.net·wpf
编程乐趣1 天前
自学C#,要懂得用好对象浏览器
windows·.net
驱动小百科11 天前
如何在Windows上安装.NET Framework 详细教程分享
windows·.net·.net framework·.net安装·.net下载