log4net写日志

1、nuget添加log4net、Microsoft.Extensions.Logging.Log4Net.AspNetCore、System.Data.SqlClient三个引用

 

 

 

 

2、项目新建一个CfgFile文件夹添加log4net.config配置文件

复制代码
  1 <?xml version="1.0" encoding="utf-8"?>
  2 <log4net>
  3     <!-- Define some output appenders -->
  4     <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
  5         <file value="log4net\log.log" />
  6         <!--追加日志内容-->
  7         <appendToFile value="true" />
  8 
  9         <!--防止多线程时不能写Log,官方说线程非安全-->
 10         <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
 11 
 12         <!--可以为:Once|Size|Date|Composite-->
 13         <!--Composite为Size和Date的组合-->
 14         <rollingStyle value="Composite" />
 15 
 16         <!--当备份文件时,为文件名加的后缀-->
 17         <datePattern value="yyyyMMdd.TXT" />
 18 
 19         <!--日志最大个数,都是最新的-->
 20         <!--rollingStyle节点为Size时,只能有value个日志-->
 21         <!--rollingStyle节点为Composite时,每天有value个日志-->
 22         <maxSizeRollBackups value="30" />
 23 
 24         <!--可用的单位:KB|MB|GB-->
 25         <maximumFileSize value="3MB" />
 26 
 27         <!--置为true,当前最新日志文件名永远为file节中的名字-->
 28         <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
 29         <staticLogFileName value="true" />
 30 
 31         <!--输出级别在INFO和ERROR之间的日志-->
 32         <filter type="log4net.Filter.LevelRangeFilter">
 33             <param name="LevelMin" value="ALL" />
 34             <param name="LevelMax" value="FATAL" />
 35         </filter>
 36         <layout type="log4net.Layout.PatternLayout">
 37             <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
 38         </layout>
 39     </appender>
 40 
 41     <!--SQL数据库-->
 42     <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
 43         <bufferSize value="1" />
 44         <connectionType value="System.Data.SqlClient.SqlConnection, System.Data.SqlClient, Version=4.6.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
 45         <connectionString value="data source=DESKTOP-1Q7NAPD;initial catalog=Test;integrated security=false;persist security info=True;User ID=sa;Password=123456" />
 46         <commandText value="INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
 47         <parameter>
 48             <parameterName value="@log_date" />
 49             <dbType value="DateTime" />
 50             <layout type="log4net.Layout.RawTimeStampLayout" />
 51         </parameter>
 52         <parameter>
 53             <parameterName value="@thread" />
 54             <dbType value="String" />
 55             <size value="255" />
 56             <layout type="log4net.Layout.PatternLayout">
 57                 <conversionPattern value="%thread" />
 58             </layout>
 59         </parameter>
 60         <parameter>
 61             <parameterName value="@log_level" />
 62             <dbType value="String" />
 63             <size value="50" />
 64             <layout type="log4net.Layout.PatternLayout">
 65                 <conversionPattern value="%level" />
 66             </layout>
 67         </parameter>
 68         <parameter>
 69             <parameterName value="@logger" />
 70             <dbType value="String" />
 71             <size value="255" />
 72             <layout type="log4net.Layout.PatternLayout">
 73                 <conversionPattern value="%logger" />
 74             </layout>
 75         </parameter>
 76         <parameter>
 77             <parameterName value="@message" />
 78             <dbType value="String" />
 79             <size value="4000" />
 80             <layout type="log4net.Layout.PatternLayout">
 81                 <conversionPattern value="%message" />
 82             </layout>
 83         </parameter>
 84         <parameter>
 85             <parameterName value="@exception" />
 86             <dbType value="String" />
 87             <size value="2000" />
 88             <layout type="log4net.Layout.ExceptionLayout" />
 89         </parameter>
 90     </appender>
 91 
 92     <root>
 93         <priority value="ALL"/>
 94         <!--日志级别(从低到高):ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
 95         <level value="ALL"/>
 96         <appender-ref ref="rollingAppender" />
 97         <!--SQL数据库-->
 98         <appender-ref ref="AdoNetAppender_SqlServer" />
 99     </root>
100 </log4net>
View Code
复制代码

 注意log4net.config的属性配置为“始终复制”

 

 

有两种记录日志的方式,一种是文本,一种是插入数据库。

配置分别对应name="rollingAppender"和name="AdoNetAppender_SqlServer"两个节点。

注意数据库节点里面需要配置数据库连接的相关信息。

 

创建数据库Test,并创建表Log4Net,数据结构如下:

复制代码
 1 USE [Test]
 2 GO
 3 
 4 /****** Object:  Table [dbo].[Log4Net]    Script Date: 2022/5/1 18:55:48 ******/
 5 SET ANSI_NULLS ON
 6 GO
 7 
 8 SET QUOTED_IDENTIFIER ON
 9 GO
10 
11 SET ANSI_PADDING ON
12 GO
13 
14 CREATE TABLE [dbo].[Log4Net](
15     [Id] [int] IDENTITY(1,1) NOT NULL,
16     [Date] [datetime] NOT NULL,
17     [Thread] [varchar](255) NOT NULL,
18     [Level] [varchar](50) NOT NULL,
19     [Logger] [varchar](255) NOT NULL,
20     [Message] [varchar](4000) NOT NULL,
21     [Exception] [varchar](2000) NULL,
22  CONSTRAINT [PK_Log4Net] PRIMARY KEY CLUSTERED 
23 (
24     [Id] ASC
25 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
26 ) ON [PRIMARY]
27 
28 GO
29 
30 SET ANSI_PADDING OFF
31 GO
View Code
复制代码

3、Program.cs 添加如下代码

 

builder.Logging.AddLog4Net("CfgFile/log4net.config");

 

如果log4net.config放在根目录,可不用写文件路径

4、创建LogController控制器

复制代码
 1 using Microsoft.AspNetCore.Mvc;
 2 
 3 namespace Project6.Controllers
 4 {
 5     public class LogController : Controller
 6     {
 7         private readonly ILogger _logger;
 8         private readonly ILoggerFactory _loggerFactory;
 9 
10         public  LogController(ILogger<LogController> logger,ILoggerFactory loggerFactory)
11         {
12             this._logger = logger;
13             this._loggerFactory = loggerFactory;
14 
15             ILogger<LogController> _logger2 = loggerFactory.CreateLogger<LogController>();
16 
17             this._logger.LogInformation($"{this.GetType().Name}: 被构造");
18             _logger2.LogInformation($"{this.GetType().Name}被Logger2构造");
19 
20         }
21         public IActionResult Index()
22         {
23             this._logger.LogInformation($"index被执行了");
24 
25             ILogger<LogController> logger = this._loggerFactory.CreateLogger<LogController>();
26             logger.LogInformation($"index被factory执行了");
27 
28             return View();
29         }
30 
31         public IActionResult Level()
32         {
33             _logger.LogDebug("this is Debug");
34             _logger.LogInformation("this is Info");
35             _logger.LogWarning("this is Warn");
36             _logger.LogError("this is Error");
37             _logger.LogTrace("this is Trace");
38             _logger.LogCritical("this is Critical");
39 
40             return new JsonResult(new { sucess = true });
41         }
42     }
43 }
View Code
复制代码

 

5、执行logController控制器/log/index

查看debug/net6.0/log4net目录下生成相应的日志

查看数据库Test表Log4Net也记录了相应的日志

 6、依次修改log4net.config

<!--日志级别(从低到高):ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->

<level value="ALL"/>

节点的值,然后执行/log/Level

发现配置为OFF,日志关闭,不在记录日志

配置为FATAL只记录FATAL类型的日志。

配置为ERROR记录FATAL和ERROR类型的日志。以此类推。。。。

 

posted @   ziff123  阅读(220)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示