日志组件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>
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();
第四步:添加控制器开始写日志,注入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 }
第五步:启动程序
第六步:通过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

浙公网安备 33010602011771号