Asp.Net Core中使用日志组件log4net
我们在开发任何项目过程中,记录各种日志是太正常不过的事情。没有日志记录的项目,也不可能放心进入生产环境运行。因此日志的记录,是必须要做的。
在.NET开发中,log4net是个常用的日志组件。本文简单记录下在ASP.NET Core中使用log4net来写日志。
1.Nuget中引入log4net组件
控制台执行以下命令:
Install-Package log4net
Install-Package Microsoft.Extensions.Logging.Log4Net.AspNetCore
2.在项目根目录下新建log4net的配置文件log4net.config,并将其设置为始终复制。
项目根目录下创建文件夹CfgFile,在添加XML文件log4net.config
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<!-- Define some output appenders -->
<appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
<file value="log4\log.txt" />
<!--追加日志内容-->
<appendToFile value="true" /> <!--防止多线程时不能写Log,官方说线程非安全-->
<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" /> <!--输出级别在INFO和ERROR之间的日志-->
<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>
</appender> <!--SqlServer形式-->
<!--log4net日志配置:http://logging.apache.org/log4net/release/config-examples.html -->
<appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
<!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库-->
<bufferSize value="0" />
<connectionType value="System.Data.SqlClient.SqlConnection,System.Data.SqlClient, Version=4.6.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<connectionString value="Data Source=.\SQLEXPRESS;Initial Catalog=LogManager;Persist Security Info=True;User ID=sa;Password=a123456!" />
<commandText value="INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</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" />
<appender-ref ref="AdoNetAppender_SqlServer" />
</root>
</log4net>
3.在Controller中输出日志内容:
public class SecondController : Controller
{
private readonly ILogger<SecondController> _Logger;
private readonly ILoggerFactory _LoggerFactory;
public SecondController(ILogger<SecondController> logger, ILoggerFactory loggerFactory)
{
this._Logger = logger;
this._Logger.LogInformation($"{this.GetType().Name} 被构造了。。。_Logger"); this._LoggerFactory = loggerFactory;
ILogger<SecondController> _Logger2 = this._LoggerFactory.CreateLogger<SecondController>();
_Logger2.LogInformation($"{this.GetType().Name} 被构造了。。。_Logger2");
} public IActionResult Index()
{
ILogger<SecondController> _Logger3 = this._LoggerFactory.CreateLogger<SecondController>();
_Logger3.LogInformation($"Index 被执行了。。。。。_Logger3");
this._Logger.LogInformation($"Index 被执行了。。。");
return View();
} public IActionResult Level()
{
_Logger.LogDebug("this is Debug");
_Logger.LogInformation("this is Info");
_Logger.LogWarning("this is Warn");
_Logger.LogError("this is Error");
_Logger.LogTrace("this is Trace");
_Logger.LogCritical("this is Critical"); return new JsonResult(new { Success = true });
} public object GetData()
{
return new
{
Id = 123,
Name = "Michael"
};
}
}
以上配置的log4net,实现了.txt格式日志文件的写入,还有日志写库。
输出日志如下:
2022-11-12 22:29:46,368 [.NET ThreadPool Worker] INFO Advanced.NET6.Project.Controllers.SecondController - SecondController 被构造了。。。_Logger
2022-11-12 22:29:46,377 [.NET ThreadPool Worker] INFO Advanced.NET6.Project.Controllers.SecondController - SecondController 被构造了。。。_Logger2
2022-11-12 22:29:55,460 [.NET ThreadPool Worker] INFO Advanced.NET6.Project.Controllers.SecondController - Index 被执行了。。。。。_Logger3
2022-11-12 22:29:55,465 [.NET ThreadPool Worker] INFO Advanced.NET6.Project.Controllers.SecondController - Index 被执行了。。。
执行以下SQL语句,查询下写入库中的日志:
select * from log4net order by Date desc
得到如下的数据列表:
Id Date Thread Level Logger Message Exception
1009 2022-11-12 22:29:55.467 .NET ThreadPool Worker INFO Advanced.NET6.Project.Controllers.SecondController Index 被执行了。。。
1008 2022-11-12 22:29:55.460 .NET ThreadPool Worker INFO Advanced.NET6.Project.Controllers.SecondController Index 被执行了。。。。。_Logger3
1007 2022-11-12 22:29:46.377 .NET ThreadPool Worker INFO Advanced.NET6.Project.Controllers.SecondController SecondController 被构造了。。。_Logger2
1006 2022-11-12 22:29:46.370 .NET ThreadPool Worker INFO Advanced.NET6.Project.Controllers.SecondController SecondController 被构造了。。。_Logger
1004 2022-11-12 22:28:46.443 1 INFO Microsoft.Hosting.Lifetime Hosting environment: Development
1003 2022-11-12 22:28:46.437 1 INFO Microsoft.Hosting.Lifetime Application started. Press Ctrl+C to shut down.
1002 2022-11-12 22:28:46.160 1 INFO Microsoft.Hosting.Lifetime Now listening on: http://localhost:5999
8 2022-11-11 09:55:40.147 .NET ThreadPool Worker INFO Advanced.NET6.Project.Controllers.SecondController Index 被执行了。。。
7 2022-11-11 09:55:40.140 .NET ThreadPool Worker INFO Advanced.NET6.Project.Controllers.SecondController Index 被执行了。。。。。_Logger3
6 2022-11-11 09:55:37.507 .NET ThreadPool Worker INFO Advanced.NET6.Project.Controllers.SecondController SecondController 被构造了。。。_Logger2
5 2022-11-11 09:55:37.493 .NET ThreadPool Worker INFO Advanced.NET6.Project.Controllers.SecondController SecondController 被构造了。。。_Logger
3 2022-11-11 09:55:25.780 1 INFO Microsoft.Hosting.Lifetime Hosting environment: Development
2 2022-11-11 09:55:25.773 1 INFO Microsoft.Hosting.Lifetime Application started. Press Ctrl+C to shut down.
1 2022-11-11 09:55:25.630 1 INFO Microsoft.Hosting.Lifetime Now listening on: http://localhost:5999
log4net的使用,就这样完事啦...

Asp.Net Core中使用日志组件log4net的更多相关文章
- 玩转ASP.NET Core中的日志组件
简介 日志组件,作为程序员使用频率最高的组件,给程序员开发调试程序提供了必要的信息.ASP.NET Core中内置了一个通用日志接口ILogger,并实现了多种内置的日志提供器,例如 Console ...
- (14)ASP.NET Core 中的日志记录
1.前言 ASP.NET Core支持适用于各种内置和第三方日志记录提供应用程序的日志记录API.本文介绍了如何将日志记录API与内置提供应用程序一起使用. 2.添加日志提供程序 日志记录提供应用程序 ...
- Asp.Net Core中利用Seq组件展示结构化日志功能
在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看 ...
- .Net Core中的日志组件(Logging)
1.介绍 Logging组件是微软实现的日志记录组件包括控制台(Console).调试(Debug).事件日志(EventLog)和TraceSource,但是没有实现最常用用的文件记录日志功能(可以 ...
- ASP.NET Core 中的日志记录
目录 内置日志的使用 使用Nlog 集成ELK 参考 内置日志的使用 Logger 是 asp .net core 的内置 service,所以我们就不需要在ConfigureService里面注册了 ...
- 【Blazor】在ASP.NET Core中使用Blazor组件 - 创建一个音乐播放器
前言 Blazor正式版的发布已经有一段时间了,.NET社区的各路高手也创建了一个又一个的Blazor组件库,其中就包括了我和其他小伙伴一起参与的AntDesign组件库,于上周终于发布了第一个版本0 ...
- ASP.NET MVC中解决日志并发处理log4net
本章主要内容是将异常信息写到队列中,然后通过线程写到文本文件中,速度非常快,没有阻塞和延迟加载 1.首先在Model中建一个类MyExceptionAttribute.cs public class ...
- ASP.NET Core 异常处理与日志记录
1. ASP.NET Core 异常处理与日志记录 1.1. 异常处理 1.1.1. 异常产生的原因及处理 1.1.2. ASP.NET Core中启动开发人员异常页面 1.2. 日志记录 1.2.1 ...
- .NET Core 中的日志与分布式链路追踪
目录 .NET Core 中的日志与分布式链路追踪 .NET Core 中的日志 控制台输出 非侵入式日志 Microsoft.Extensions.Logging ILoggerFactory IL ...
- ASP.NET Core中的ActionFilter与DI
一.简介 前几篇文章都是讲ASP.NET Core MVC中的依赖注入(DI)与扩展点的,也许大家都发现在ASP.NET CORE中所有的组件都是通过依赖注入来扩展的,而且面向一组功能就会有一组接口或 ...
随机推荐
- 安全测试-WEB安全渗透测试基础知识(五)
1.5. 代码审计 1.5.1. 简介 代码审计是找到应用缺陷的过程.其通常有白盒.黑盒.灰盒等方式.白盒指通过对源代码的分析找到应用缺陷,黑盒通常不涉及到源代码,多使用模糊测试的方式,而灰盒则是黑白 ...
- matlab如何关闭figure
如果想要关闭之前打开的figure,用**close()**函数就可以了. close(H):关闭句柄为H的figure: close('name'):关闭指定name的figure: close a ...
- SpringBoot 自定义启动的logo(即banner)
1.自定义输出banner样式 推荐生成网站 http://patorjk.com/software/taag/ https://www.bootschool.net/ascii-art 2.配置 A ...
- Lua中创建新的文件夹
如下: os.execute('mkdir 文件夹名称')
- nightwatch入门教程
Nightwatch.js 是一个用来测试web应用和网站的自动化测试框架,它是由NodeJs编写的,使用了W3C WebDriver API(之前是Selenium WebDriver) 所以我们首 ...
- react框架-知识点(ref,, setState)
react的思想:无必要勿增实体 1. ref 使用 myRef = React.createRef() <input ref={this.myRef}></input> 2. ...
- 链接mysql数据库报错:2003-cant connect to Mysql server on ‘localhost’(10038)
今天用navicat连mysql时候突然报错了 我百度了一下,知道了是mysql服务没开,但是我打开了服务,发现服务里面没有mysql,于是就去cmd以管理员身份打开命令提示符,切换到安装mysql的 ...
- Rabbit MQ的几种模式
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件). 官网文档:https://www.rabbitmq.com/getstarted.html Rabbi ...
- 20203412马畅若 实验二《Python程序设计》实验报告
20203412马畅若 实验二<Python程序设计>实验报告 课程:<Python程序设计>班级: 2034姓名:马畅若学号:20203412实验教师:王志强实验日期: ...
- Linux 第七节(LVM,网卡配置)
LVM 逻辑卷管理器: 解决分区灵活调整大小问题 PV 物理卷 VG 卷组 LV 逻辑卷 pvcreate /dev/sdc vgcreate xiaochong /dev/sdb /dev/sdc ...