博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
阅读量:6462 次
发布时间:2019-06-23

本文共 7392 字,大约阅读时间需要 24 分钟。

本文转自:

本篇是在的基础上添加日志功能,并记录NLog在Asp.Net Core里的使用方法。

第一部分:默认Logger支持

一、project.json添加日志包引用,并在cmd窗口使用 dotnet restore 命令还原包文件。

1 { 2   "version": "1.0.0-*", 3   "buildOptions": { 4     "debugType": "portable", 5     "emitEntryPoint": true 6   }, 7   "dependencies": { 8     "Microsoft.NETCore.App": { 9       "type": "platform",10       "version": "1.0.0"11     },12     "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",13     "Microsoft.AspNetCore.Mvc": "1.0.0",14     "Microsoft.Extensions.Logging": "1.0.0",15     "Microsoft.Extensions.Logging.Console": "1.0.0",16     "Microsoft.Extensions.Logging.Debug": "1.0.0",17     "Microsoft.Extensions.Logging.Filter": "1.0.0"18   },19   "frameworks": {20     "netcoreapp1.0": {21       "imports": "dnxcore50"22     }23   }24 }

二、修改Startup.cs文件,添加命令行窗口和调试窗口的日志记录功能。

1 using Microsoft.AspNetCore.Builder; 2 using Microsoft.Extensions.DependencyInjection; 3 using Microsoft.Extensions.Logging; 4  5 namespace WebApiFrame 6 { 7     public class Startup 8     { 9         public void ConfigureServices(IServiceCollection services)10         {11             // 注入MVC框架12             services.AddMvc();13         }14 15         public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)16         {17             // 添加日志支持18             loggerFactory.AddConsole();19             loggerFactory.AddDebug();            20 21             // 添加MVC中间件22             app.UseMvc();23         }24     }25 }

三、分别使用VS Code的调试功能和命令行的 dotnet run 命令启动程序,浏览器访问 http://localhost:5000/api/users/1 地址后,可以查看到窗口日志打印信息。

 

第二部分:Logger日志级别

日志级别从低到高一共六级,默认情况下,控制台上输出的日志会采取下面的格式:

我们在DemoController.cs控制器里演示如何设置和输出对应级别的日志。

一、修改Startup.cs内容,设置日志级别。

1 using Microsoft.AspNetCore.Builder; 2 using Microsoft.Extensions.DependencyInjection; 3 using Microsoft.Extensions.Logging; 4  5 namespace WebApiFrame 6 { 7     public class Startup 8     { 9         public void ConfigureServices(IServiceCollection services)10         {11             // 注入MVC框架12             services.AddMvc();13         }14 15         public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)16         {17             // 添加日志支持18 19             // 设置日志最小级别Warning20             loggerFactory.AddConsole(LogLevel.Warning);21             22             //loggerFactory.AddDebug();23 24             // 添加MVC中间件25             app.UseMvc();26         }27     }28 }

二、修改UsersController.cs文件内容,添加日志输出。

1 using System; 2 using Microsoft.AspNetCore.Mvc; 3 using Microsoft.Extensions.Logging; 4 using WebApiFrame.Models; 5  6 namespace WebApiFrame.Controllers 7 { 8  9     [Route("api/[controller]")]10     public class UsersController : Controller11     {12         private ILogger
_logger;13 14 public UsersController(ILogger
logger){15 _logger = logger;16 }17 18 [HttpGet("{id}")]19 public IActionResult Get(int id)20 {21 // 演示日志输出22 _logger.LogInformation("This is Information Log!");23 _logger.LogWarning("This is Warning Log!");24 _logger.LogError("This is Error Log!");25 26 var user = new User() { Id = id, Name = "Name:" + id, Sex = "Male" };27 return new ObjectResult(user);28 }29 30 [HttpPost]31 public IActionResult Post([FromBody] User user){32 if(user == null){33 return BadRequest();34 }35 36 // TODO:新增操作37 user.Id = new Random().Next(1, 10);38 return CreatedAtAction("Get", new { id = user.Id }, user);39 }40 41 [HttpPut("{id}")]42 public IActionResult Put(int id, [FromBody] User user){43 if(user == null){44 return BadRequest();45 }46 47 // TODO: 更新操作48 return new NoContentResult();49 }50 51 [HttpDelete("{id}")]52 public void Delete(int id){53 // TODO: 删除操作54 55 }56 }57 }

三、cmd窗口执行 dotnet run 命令,浏览器访问 http://localhost:5000/api/users/1 地址,查看cmd窗口日志输出。

 

或者,使用Filter设置日志级别,重新执行访问并查看日志输出。

1         public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) 2         { 3             // 添加日志支持 4  5             // 设置日志最小输出级别为Error 6             loggerFactory.WithFilter(new FilterLoggerSettings() 7             { 8                 // 设置以命名空间开头的日志的最小输出级别 9                 { "Microsoft", LogLevel.Warning },10                 { "WebApiFrame", LogLevel.Error }11             }).AddConsole();12 13             //loggerFactory.AddDebug();14 15             // 添加MVC中间件16             app.UseMvc();17         }

 

第三部分:NLog

NLog是一个简单灵活的.Net日志记录类库。相比Log4Net来说,配置要简单许多。

一、project.json添加NLog包引用,并使用 dotnet restore 命令还原包文件。

1 { 2   "version": "1.0.0-*", 3   "buildOptions": { 4     "debugType": "portable", 5     "emitEntryPoint": true 6   }, 7   "dependencies": { 8     "Microsoft.NETCore.App": { 9       "type": "platform",10       "version": "1.0.0"11     },12     "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",13     "Microsoft.AspNetCore.Mvc": "1.0.0",14     "Microsoft.Extensions.Logging": "1.0.0",15     "Microsoft.Extensions.Logging.Console": "1.0.0",16     "Microsoft.Extensions.Logging.Debug": "1.0.0",17     "Microsoft.Extensions.Logging.Filter": "1.0.0",18     "NLog.Extensions.Logging": "1.0.0-rtm-alpha2"19   },20   "frameworks": {21     "netcoreapp1.0": {22       "imports": "dnxcore50"23     }24   }25 }

二、添加NLog配置文件nlog.config。

1 
2
7 8
9
10
11
13 14 15
17 18
19
20 21
22
23
24 25
26
27
28
29

三、修改Startup.cs文件内容,添加NLog支持。

1 using Microsoft.AspNetCore.Builder; 2 using Microsoft.Extensions.DependencyInjection; 3 using Microsoft.Extensions.Logging; 4 using NLog.Extensions.Logging; 5  6 namespace WebApiFrame 7 { 8     public class Startup 9     {10         public void ConfigureServices(IServiceCollection services)11         {12             // 注入MVC框架13             services.AddMvc();14         }15 16         public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)17         {18             // 添加日志支持19             //loggerFactory.AddConsole();20             //loggerFactory.AddDebug();21 22             // 添加NLog日志支持23             loggerFactory.AddNLog();24 25             // 添加MVC中间件26             app.UseMvc();27         }28     }29 }

四、重新执行访问并查看日志输出。

生成的日志文件和内容

 

第四部分、其他相关内容

最后,同时放开三种日志输出方式,不修改控制器里的任何代码,可以发现将同时以三种方式记录相同的日志内容。

1         public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) 2         { 3             // 添加日志支持 4             loggerFactory.AddConsole(); 5             loggerFactory.AddDebug(); 6              7             // 添加NLog日志支持 8             loggerFactory.AddNLog(); 9 10             // 添加MVC中间件11             app.UseMvc();12         }

在.Net Core框架里,日志功能主要由 ILoggerFactory, ILoggerProvider, ILogger 这三个接口体现:

ILoggerFactory:工厂接口。只提供注册LoggerProvider的方法和创建单实例Logger对象的方法。

ILoggerProvider:提供真正具有日志输出功能的Logger对象的接口。每一种日志输出方式对应一个不同的LoggerProvider类。

ILogger:Logger接口。Logger实例内部会维护一个ILogger接口的集合,集合的每一项都是由对应的LoggerProvider类注册生成的Logger对象而来。当调用Logger的日志输出方法时,实际是循环调用内部集合的每一个Logger对象的输出方法,所以就能看到上面出现的效果。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出作者名和原文连接,否则保留追究法律责任的权利。
 
分类: 

 

你可能感兴趣的文章
Tengine + uwsgi + django平台搭建
查看>>
View Horizon Mirage安装手册(三)——Mirage Management安装
查看>>
SQL触发器总结
查看>>
利用组策略管理Microsoft Office 2007
查看>>
Linux 系统运维学习方法汇总
查看>>
Zabbix监控之检测程序日志中错误发生的次数
查看>>
Msg 15138 The database principal owns a schema in the database, and cannot be dropped.
查看>>
Tomcat6.0连接器源码分析
查看>>
Cassandra 中的Snitch
查看>>
Impress.js上手 - 抛开PPT、制作Web 3D幻灯片放映
查看>>
生活杂事--度过十一中秋
查看>>
Pyrex也许是一个好东西
查看>>
Java内部类总结
查看>>
NeHe OpenGL第二课:多边形
查看>>
让WP7下复杂列表选项生动起来
查看>>
WINFORM WPF字体颜色相互转换
查看>>
能力不是仅靠原始积累(三)
查看>>
实战:使用终端服务网关访问终端服务
查看>>
彻底学会使用epoll(一)——ET模式实现分析
查看>>
树状数组
查看>>