C#.NET Log4Net日志的基础用法-C/S开发框架

本篇讲述使用Log4Net日志的基础用法
1,在项目中引入如下包文件,版本选择最新稳定版即可
<PackageReference Include="log4net" Version="2.0.12" />
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="5.0.0" />
2,在项目根目录加入Log4net.config 配置文件 (注意:别忘了将文件,右键---属性--始终复制)

3,Log4net.config 配置文件,这里只展示Debug日志类型,其他几个日志类型都一样,照搬就行
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<!-- 将日志以回滚文件的形式写到文件中 -->
<!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
<!--Error-->
<!--Info-->
<!--WARN-->
<!--Debug-->
<appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
<!--不加utf-8编码格式,中文字符将显示成乱码-->
<param name="Encoding" value="utf-8" />
<!--定义文件存放位置-->
<file value="Log/Debug/debug.log"/>
<!--是否追加到文件-->
<appendToFile value="true" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<rollingStyle value="Date" />
<!--是否保存日志文件的扩展名-->
<PreserveLogFileNameExtension value="true" />
<!--日志文件名是否为静态-->
<StaticLogFileName value="false"/>
<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
<datePattern value="yyyyMMdd" />
<!--最多产生的日志文件数,超过则只保留最新的n+1个-->
<maxSizeRollBackups value="1" />
<!--每个文件的大小,只在混合方式与文件大小方式下使用,超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入,没带数字最晚写入-->
<maximumFileSize value="256MB" />
<!--多线程时采用最小锁定 不锁定文本文件,防止多线程时不能写Log-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--布局(向用户显示最后经过格式化的输出信息)-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date| %-5level %c %newline%message%newline--------------------------------%newline" />
</layout>
<!--过滤设置,LevelRangeFilter为使用的过滤器。-->
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="DEBUG" />
</filter>
</appender>
<!--Debug-->
<root>
<!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
<!-- 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 -->
<!-- 如果没有定义LEVEL的值,则缺省为DEBUG -->
<level value="ALL" />
<!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
<appender-ref ref="ErrorLog" />
<appender-ref ref="InfoLog" />
<appender-ref ref="WarnLog" />
<appender-ref ref="DebugLog" />
</root>
</log4net>
4,在 Program.cs 文件中全局配置日志
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.ConfigureLogging((hostingContext, builder) =>
{
//1.过滤掉系统默认的一些日志
//2.这里配置后,appsettings.json中的Logging配置将失效
builder.AddFilter("System", LogLevel.Error); //只有错误时才打印日志
builder.AddFilter("Microsoft", LogLevel.Error); //只有错误时才打印日志
builder.AddFilter("Microsoft.Hosting.Lifetime", LogLevel.Error); //只有错误时才打印日志
builder.AddFilter("MyShopApi", LogLevel.Debug); //自定义项目过滤级别,使用项目命名空间
//3.清除console控制台打印的日志,注释改行后控制台也会同步打印日志
//builder.ClearProviders();
//4.默认log4net.confg
//Windows环境不区分大小写,这么写为了适应Linux环境
builder.AddLog4Net(Path.Combine(Directory.GetCurrentDirectory(), "Log4net.config"));
});
});
5,同样,如果不在 Program.cs 入口中配置日志级别,则系统默认使用appsettings.json配置文件的日志级别
"Logging": {
"LogLevel": {
"Default": "Information", //默认级别
"MyShopApi": "Debug", //使用项目命名空间 自定义项目过滤级别
"Microsoft": "Error", //注释该行后,将不打印系统日志(或者使用高日记级别也不会打印基础系统信息)
"System": "Error", //注释该行后,将不打印系统日志(或者使用高日记级别也不会打印基础系统信息)
"Microsoft.Hosting.Lifetime": "Error" //注释该行后,将不打印系统日志(或者使用高日记级别也不会打印基础系统信息)
},
"Log4Net": {
"Name": "MyShopApi"
}
},
"AllowedHosts": "*",
6,用法1,使用构造函数注入,红色加粗部分
[Route("api/[controller]/[action]")]
[ApiController]
public class UserController : ControllerBase
{
private readonly ILogger<UserController> logger;
public UserController(IUserService _userService,ILogger<UserController> _logger)
{
userService = _userService;
this.logger = _logger;
}
。。。。
[HttpPost]
public async Task<IActionResult> GetUserInfo()
{
//测试日志
this.logger.LogInformation("this is logInfo");
this.logger.LogError("this is logerror");
this.logger.LogDebug("this is debug");
this.logger.LogWarning("this is warning");
this.logger.LogTrace("this is trace");
}
7,用法2,主要用在中间件或过滤器中,日志打印效果同上
public class ExceptionHandlerMid
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(ExceptionHandlerMid));
private readonly RequestDelegate _next;
public ExceptionHandlerMid(RequestDelegate next)
{
this._next = next;
}
private async Task HandleExceptionAsync(HttpContext context, Exception ex)
{
if (ex == null) return;
Console.WriteLine($"异常消息:{ex.GetBaseException()}");
log.Error(ex.GetBaseException().ToString());
}
}
8,打印效果



CSCODE.NETC/S开发框架-C/S框架网专注.NET技术、C/S架构快速开发框架软件
参考文档:
FastReport.NET自动文本宽度+自动换行+自动行高|C/S开发框架
FastReport.NET2023破解版去除水印DEMO VERSION (2025.1.14/2023.2.18版本)|C/S开发框架
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
.NET C/S架构软件用户授权设计方案(mac地址+白名单用户)|C/S开发框架
企业级C/S系统快速开发框架(Winform+.NET8+EFCore)|C/S开发框架
.NETCore WebApi运行报错:System.AggregateException:“Some services are not able to be constructed|C/S开发框架
C#.NET各版本常用语法糖大全(C#3~C#10)|C/S开发框架
CSFramework.EF数据库框架应用Schema测试多种数据库(.NET8+EFCore)|C/S开发框架
CSFrameworV6试用版开发指南 | 主程序初始化CSFramework.EF数据库框架(.NET8)|C/S开发框架
.NET Reactor(.NET混淆器)加壳软件使用|C/S开发框架
CSFramework开发框架使用.NET Reactor加壳软件导致多语言失效|C/S开发框架
.NETCore WebApi后端开发框架+达梦数据库测试报告|C/S开发框架
C#.NET调用达梦数据库的存储过程返回多张表|C/S开发框架
C#.NET 达梦数据库存储过程 获取OUT参数返回值|C/S开发框架
SqlServer数据类型、DbType类型、.NET类型与达梦数据类型关系表|C/S开发框架
.NET8 .NETCore运行环境下载|C/S开发框架
FastReport.NET自动文本宽度+自动换行+自动行高|C/S开发框架
FastReport.NET2023破解版去除水印DEMO VERSION (2025.1.14/2023.2.18版本)|C/S开发框架
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
.NET C/S架构软件用户授权设计方案(mac地址+白名单用户)|C/S开发框架
企业级C/S系统快速开发框架(Winform+.NET8+EFCore)|C/S开发框架
.NETCore WebApi运行报错:System.AggregateException:“Some services are not able to be constructed|C/S开发框架
C#.NET各版本常用语法糖大全(C#3~C#10)|C/S开发框架
CSFramework.EF数据库框架应用Schema测试多种数据库(.NET8+EFCore)|C/S开发框架
CSFrameworV6试用版开发指南 | 主程序初始化CSFramework.EF数据库框架(.NET8)|C/S开发框架
.NET Reactor(.NET混淆器)加壳软件使用|C/S开发框架
CSFramework开发框架使用.NET Reactor加壳软件导致多语言失效|C/S开发框架
.NETCore WebApi后端开发框架+达梦数据库测试报告|C/S开发框架
C#.NET调用达梦数据库的存储过程返回多张表|C/S开发框架
C#.NET 达梦数据库存储过程 获取OUT参数返回值|C/S开发框架
SqlServer数据类型、DbType类型、.NET类型与达梦数据类型关系表|C/S开发框架
.NET8 .NETCore运行环境下载|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
