.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文件,如下图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人