前面雖然完成了基本功能的編碼,但是這個項目還只是一個半成品,缺少一些輔助的功能,比如日志、身份驗證等。
本篇將在項目中加入日志功能,把系統運行中的錯誤信息記錄到日志文件中,方便上線后的錯誤排查。
在.net core webapi中,框架已經為我們提供了基本的日志記錄服務,在Microsoft.Extensions.Logging這個名稱空間中,
稍顯不足的是框架提供的日志服務不能記錄到文件,我們需要引用第三方的組件來搭配完成日志記錄功能,
比較常用的第三方日志包有Nlog、log4net等,本項目的需求只是記錄到文件中,
所以使用一個輕量級的日志包Serilog.Extensions.Logging.File,先使用VS2019的NuGet包管理器安裝此包,
然后在程序中引用就可以了,如下圖所示:

安裝后依賴項中的包如下:

准備工作:
1 . 在Startup.cs中修改Configure()方法,增加對ILoggerFactory的注入支持,並提供寫日志文件功能,
代碼如下(見紅色部分):
1 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 2 public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) 3 { 4 if (env.IsDevelopment()) 5 { 6 app.UseDeveloperExceptionPage(); 7 8 } 9 10 //AddFile()方法是Serilog.Extensions.Logging.File中提供的擴展方法,用於將日志寫入文件中 11 loggerFactory.AddFile("Logs/log{Date}.txt");
12 13 14 app.UseRouting(); 15 16 app.UseAuthorization(); 17 18 19 app.UseEndpoints(endpoints => 20 { 21 endpoints.MapControllers(); 22 }); 23 }
2. 修改UsersController.cs中的構造函數,增加對ILogger<out TCategoryName>的注入支持,代碼如下(紅色部分):
1 [Route("api/[controller]")] 2 [ApiController] 3 public class UsersController : ControllerBase 4 { 5 private ILogger<UsersController> _logger; 6 private IUserDao _userDao; 7 public UsersController(ILogger<UsersController> logger, IUserDao userDao) 8 { 9 _logger = logger; 10 _userDao = userDao; 11 } 12 13 //......... 14 //......... 15 }
完成前2個步驟的准備工作,接下來在終結點ManageUsers( )中加入日志功能就簡單了(其他的終結點類似),
代碼如下(見紅色部分):
1 [HttpGet] 2 public ContentResult ManageUsers() 3 { 4 try 5 { 6 List<User> list = _userDao.GetUserList(); 7 8 _logger.LogInformation("======{p1}======{p2}======", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:fff"), list.Count.ToString()); 9 10 return Content(list.ToJson()); 11 } 12 catch (Exception ex) 13 { 14 _logger.LogError(ex, "##{p1}## UsersController-ManageUsers() Exception", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); 15 16 return Content("{'result':'error'}"); ; 17 } 18 }
訪問http://localhost:52384/api/users,根目錄下將生成Logs文件夾,里面是以"log+當前日期"命名的txt文件,如下圖:

