日志组件Log4net(一)

本节学习内容如下:

(1)nuget引人
(2)准备配置文件
(3)配置读取配置文件生效
(4)注入得到log4net实例开始写日志


示例:

第一步:nuget引入log4net、Microsoft.Extensions.Logging.Log4Net.AspNetCore

第二步:准备配置文件,官网可以下载:Apache log4net – Download Apache log4net - Apache log4net

1、添加log4net.config配置文件

  1 <?xml version="1.0" encoding="utf-8"?>
  2 <log4net>
  3     <!-- Define some output appenders -->
  4     <!--Text形式-->
  5     <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
  6         <file value="log4\log.txt" />
  7         <!--追加日志内容-->
  8         <appendToFile value="true" />
  9 
 10         <!--防止多线程时不能写Log,官方说线程非安全-->
 11         <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
 12 
 13         <!--可以为:Once|Size|Date|Composite-->
 14         <!--Composite为Size和Date的组合-->
 15         <rollingStyle value="Composite" />
 16 
 17         <!--当备份文件时,为文件名加的后缀-->
 18         <datePattern value="yyyyMMdd.TXT" />
 19 
 20         <!--日志最大个数,都是最新的-->
 21         <!--rollingStyle节点为Size时,只能有value个日志-->
 22         <!--rollingStyle节点为Composite时,每天有value个日志-->
 23         <maxSizeRollBackups value="20" />
 24 
 25         <!--可用的单位:KB|MB|GB-->
 26         <maximumFileSize value="3MB" />
 27 
 28         <!--置为true,当前最新日志文件名永远为file节中的名字-->
 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     <!--SqlServer形式-->
 42     <!--log4net日志配置:http://logging.apache.org/log4net/release/config-examples.html -->
 43     <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
 44         <!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库-->
 45         <bufferSize value="0" />
 46         <connectionType value="System.Data.SqlClient.SqlConnection,System.Data.SqlClient, Version=4.6.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
 47         <connectionString value="Data Source=.;Initial Catalog=LogManager;Persist Security Info=True;User ID=sa;Password=123456" />
 48         <commandText value="INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
 49         <parameter>
 50             <parameterName value="@log_date" />
 51             <dbType value="DateTime" />
 52             <layout type="log4net.Layout.RawTimeStampLayout" />
 53         </parameter>
 54         <parameter>
 55             <parameterName value="@thread" />
 56             <dbType value="String" />
 57             <size value="255" />
 58             <layout type="log4net.Layout.PatternLayout">
 59                 <conversionPattern value="%thread" />
 60             </layout>
 61         </parameter>
 62         <parameter>
 63             <parameterName value="@log_level" />
 64             <dbType value="String" />
 65             <size value="50" />
 66             <layout type="log4net.Layout.PatternLayout">
 67                 <conversionPattern value="%level" />
 68             </layout>
 69         </parameter>
 70         <parameter>
 71             <parameterName value="@logger" />
 72             <dbType value="String" />
 73             <size value="255" />
 74             <layout type="log4net.Layout.PatternLayout">
 75                 <conversionPattern value="%logger" />
 76             </layout>
 77         </parameter>
 78         <parameter>
 79             <parameterName value="@message" />
 80             <dbType value="String" />
 81             <size value="4000" />
 82             <layout type="log4net.Layout.PatternLayout">
 83                 <conversionPattern value="%message" />
 84             </layout>
 85         </parameter>
 86         <parameter>
 87             <parameterName value="@exception" />
 88             <dbType value="String" />
 89             <size value="2000" />
 90             <layout type="log4net.Layout.ExceptionLayout" />
 91         </parameter>
 92     </appender>
 93 
 94     <root>
 95 
 96         <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
 97         <!--OFF:0-->
 98         <!--FATAL:FATAL-->
 99         <!--ERROR: ERROR,FATAL-->
100         <!--WARN: WARN,ERROR,FATAL-->
101         <!--INFO: INFO,WARN,ERROR,FATAL-->
102         <!--DEBUG: INFO,WARN,ERROR,FATAL-->
103         <!--ALL: DEBUG,INFO,WARN,ERROR,FATAL-->
104         <priority value="ALL"/>
105 
106         <!--root类似路由,level表示支持的记录方式-->
107         <level value="INFO"/>
108         <appender-ref ref="rollingAppender" />
109         <appender-ref ref="AdoNetAppender_SqlServer" />
110     </root>
111 </log4net>
View Code

2、将log4net.config配置文件属性下复制到输出目录设置为始终复制(保证项目在编译后生成到Debug文件下)

第三步:配置读取前,要使配置文件生效处理

在Program.cs文件里进行如下配置:

 1 var builder = WebApplication.CreateBuilder(args);
 2 
 3 {
 4     builder.Logging.AddLog4Net("CfgFile/log4net.config"); 
 5 }
 6 
 7 
 8 // Add services to the container.
 9 builder.Services.AddControllersWithViews();
10 
11 {
12     builder.Services.AddSession();
13 }
14 
15 var app = builder.Build();
16 
17 // Configure the HTTP request pipeline.
18 if (!app.Environment.IsDevelopment())
19 {
20     app.UseExceptionHandler("/Home/Error");
21 }
22 
23 app.UseSession();
24 
25 app.UseStaticFiles();
26 
27 app.UseRouting();
28 
29 app.UseAuthorization();
30 
31 app.MapControllerRoute(
32     name: "default",
33     pattern: "{controller=Home}/{action=Index}/{id?}");
34 
35 app.Run();
View Code

第四步:添加控制器开始写日志,注入log4net实例

 1     public class SecondController : Controller
 2     {
 3         private readonly ILogger<SecondController> _logger;
 4         private readonly ILoggerFactory _loggerFactory;
 5 
 6         public SecondController(ILogger<SecondController> logger, ILoggerFactory loggerFactory)
 7         {
 8             this._logger = logger;
 9             this._logger.LogInformation($"{this.GetType().Name} 被构造了...... logger");
10 
11             this._loggerFactory = loggerFactory;
12             ILogger < SecondController > logger2 = this._loggerFactory.CreateLogger<SecondController>(); // 等价于一个ILogger<SecondController>
13             logger2.LogInformation($"{this.GetType().Name} 被构造了......");
14         }
15 
16         public IActionResult Index()
17         {
18             ILogger<SecondController> logger3 = this._loggerFactory.CreateLogger<SecondController>(); 
19             logger3.LogInformation($"Index方法被执行了......  logger3");
20 
21             this._logger.LogInformation($"Index方法被执行了...... logger2");
22 
23             return View();
24         }
25     }
View Code

第五步:启动程序

第六步:通过http://localhost:5109/Second/Index访问页面

第七步:查看这个文件:\bin\Debug\net6.0\log4,内容如下

2023-05-29 23:33:15,786 [1] INFO  Microsoft.Hosting.Lifetime - Now listening on: http://localhost:5109
2023-05-29 23:33:15,886 [1] INFO  Microsoft.Hosting.Lifetime - Application started. Press Ctrl+C to shut down.
2023-05-29 23:33:15,891 [1] INFO  Microsoft.Hosting.Lifetime - Hosting environment: Development
2023-05-29 23:33:15,894 [1] INFO  Microsoft.Hosting.Lifetime - Content root path: E:\Test\
2023-05-29 23:33:28,452 [35] INFO  MyStudy.NETCore6.Project02.Controllers.SecondController - SecondController 被构造了...... logger
2023-05-29 23:33:28,464 [35] INFO  MyStudy.NETCore6.Project02.Controllers.SecondController - SecondController 被构造了......
2023-05-29 23:33:28,468 [35] INFO  MyStudy.NETCore6.Project02.Controllers.SecondController - Index方法被执行了......  logger3
2023-05-29 23:33:28,473 [35] INFO  MyStudy.NETCore6.Project02.Controllers.SecondController - Index方法被执行了...... logger2

 

posted @ 2023-05-29 23:39  逆风起降  阅读(25)  评论(0)    收藏  举报