.net5 core webapi項目實戰之十三:日志處理


前面雖然完成了基本功能的編碼,但是這個項目還只是一個半成品,缺少一些輔助的功能,比如日志、身份驗證等。

 

本篇將在項目中加入日志功能,把系統運行中的錯誤信息記錄到日志文件中,方便上線后的錯誤排查。

 

在.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文件,如下圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM