[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

时间:2022-09-07 15:14:08

本文转自:https://www.cnblogs.com/niklai/p/5662094.html

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

第一部分:默认Logger支持

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
 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 }
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
 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 }
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

第二部分:Logger日志级别

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

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

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
 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 // 设置日志最小级别Warning
20 loggerFactory.AddConsole(LogLevel.Warning);
21
22 //loggerFactory.AddDebug();
23
24 // 添加MVC中间件
25 app.UseMvc();
26 }
27 }
28 }
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
 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 : Controller
11 {
12 private ILogger<UsersController> _logger;
13
14 public UsersController(ILogger<UsersController> 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 }
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
 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 }
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

第三部分:NLog

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

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
 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 }
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
 1 <?xml version="1.0" encoding="utf-8" ?>
2 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 autoReload="true"
5 internalLogLevel="Warn"
6 internalLogFile="internal-nlog.txt">
7
8 <!-- define various log targets -->
9 <targets>
10 <!-- write logs to file -->
11 <target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log"
12 layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
13
14
15 <target xsi:type="File" name="ownFile-web" fileName="nlog-own-${shortdate}.log"
16 layout="${longdate}|${logger}|${uppercase:${level}}| ${message} ${exception}" />
17
18 <target xsi:type="Null" name="blackhole" />
19 </targets>
20
21 <rules>
22 <!--All logs, including from Microsoft-->
23 <logger name="*" minlevel="Trace" writeTo="allfile" />
24
25 <!--Skip Microsoft logs and so log only own logs-->
26 <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
27 <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
28 </rules>
29 </nlog>
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
 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 }
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

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

生成的日志文件和内容

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

第四部分、其他相关内容

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
 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 }
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger

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

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

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

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

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

[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger的更多相关文章

  1. 使用Visual Studio Code开发Asp&period;Net Core WebApi学习笔记(一)-- 起步

    本文记录了在Windows环境下安装Visual Studio Code开发工具..Net Core 1.0 SDK和开发一个简单的Web-Demo网站的全过程. 一.安装Visual Studio ...

  2. 使用Visual Studio Code开发Asp&period;Net Core WebApi学习笔记(八)-- 多环境开发

    本篇将演示Asp.Net Core如何在多环境下进行开发适配. 在一个正规的开发流程里,软件开发部署将要经过三个阶段:开发.测试.上线,对应了三个环境:开发.测试.生产.在不同的环境里,需要编写不同的 ...

  3. 使用Visual Studio Code开发Asp&period;Net Core WebApi学习笔记(十)-- 发布&lpar;Windows&rpar;

    本篇将在这个系列演示的例子上继续记录Asp.Net Core在Windows上发布的过程. Asp.Net Core在Windows上可以采用两种运行方式.一种是自托管运行,另一种是发布到IIS托管运 ...

  4. 使用Visual Studio Code开发Asp&period;Net Core WebApi学习笔记(九)-- 单元测试

    本篇将结合这个系列的例子的基础上演示在Asp.Net Core里如何使用XUnit结合Moq进行单元测试,同时对整个项目进行集成测试. 第一部分.XUnit 修改 Project.json 文件内容, ...

  5. 使用Visual Studio Code开发Asp&period;Net Core WebApi学习笔记(三)-- Logger

    本篇是在上一篇的基础上添加日志功能,并记录NLog在Asp.Net Core里的使用方法. 第一部分:默认Logger支持 一.project.json添加日志包引用,并在cmd窗口使用 dotnet ...

  6. 使用Visual Studio Code开发Asp&period;Net Core WebApi学习笔记(七)-- 结构化配置

    本篇将记录.Net Core里颇有特色的结构化配置的使用方法. 相比较之前通过Web.Config或者App.Config配置文件里使用xml节点定义配置内容的方式,.Net Core在配置系统上发生 ...

  7. 使用Visual Studio Code开发Asp&period;Net Core WebApi学习笔记(六)-- 依赖注入

    本篇将介绍Asp.Net Core中一个非常重要的特性:依赖注入,并展示其简单用法. 第一部分.概念介绍 Dependency Injection:又称依赖注入,简称DI.在以前的开发方式中,层与层之 ...

  8. 使用Visual Studio Code开发Asp&period;Net Core WebApi学习笔记(五)-- Filter

    在上一篇里,介绍了中间件的相关内容和使用方法.本篇将介绍Asp.Net Core MVC框架的过滤器的相关内容和使用方法,并简单说明一下与中间件的区别. 第一部分.MVC框架内置过滤器 下图展示了As ...

  9. 使用Visual Studio Code开发Asp&period;Net Core WebApi学习笔记(四)-- Middleware

    本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Middleware功能支持. 在演示Middleware功能之前,先要了解一下Asp ...

随机推荐

  1. 《ASP&period;NET1200例》解决母版页报错&OpenCurlyDoubleQuote;内容控件必须是内容页中的*控件,或是引用母版页的嵌套母版页。”

    VS2005下,添加了母版页这个控件,我们可以讲N个页面*同的部分放在母版页来实现,并让WEB窗体集成自我们的母版页,就可以让我们的站点具有统一的风格了.在VS2005SP1之前的版本中,我们只能创 ...

  2. careercup-排序和查找 11&period;7

    11.7 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.处于实际和美观的考虑,在上面的人要比下面的人矮一点.轻一点.已知马戏团每个人的高度和重量,请编写代码计算叠罗汉最多能叠几个人. ...

  3. POJ1270 Following Orders (拓扑排序)

    Following Orders Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4254   Accepted: 1709 ...

  4. C&num;中对属性和字段的理解

    字段 C#中很少提到全局变量的概念, 引入了字段一词来代替全局变量, 但也并不是这样简单的, 字段会比全局变量的使用更难理解, 使用上会简单, 初学者当做成员变量或者全局变量不会有什么影响, 随着使用 ...

  5. vijos1051题解

    题目: 圣诞老人回到了北极圣诞区,已经快到12点了.也就是说极光表演要开始了.这里的极光不是极地特有的自然极光景象.而是圣诞老人主持的人造极光. 轰隆隆--烟花响起(来自中国的浏阳花炮之乡).接下来就 ...

  6. cvim常用快捷键

      esc:返回浏览模式 h.j.k.l:上.下.左.右 u/e.d:上半屏.下半屏 H.L:后退.前进 f.F:直接打开.后台打开 gg.G:页头.页尾 gi.gI:第一个输入框.最后一个输入框 q ...

  7. HTML5中的Web Notification桌面通知

    大家在做一些浏览器端的聊天功能的时候,或者在一些网站跟在线客服咨询的时候,会看到一些消息通知的提示,常见的有浏览器标签页的闪烁和屏幕右侧的消息通知.本篇博客就在这里简单的介绍一下如何实现这样的功能. ...

  8. &lbrack;POJ2774&rsqb;Long Long Message

    vjudge 一句话题意 给两个串,求最长公共子串. sol 把两个串接在一起求后缀数组.其实中间最好用一个没有出现过的字符连接起来. 判断如果\(SA[i]\)和\(SA[i-1]\)不属于同一个串 ...

  9. 三、糖醋鲤鱼(Sweet and sour carp)

    糖醋鲤鱼是用鲤鱼制作的一道山东济南传统名菜,为鲁菜的代表菜品之一 ,色泽金黄,外焦内嫩,酸甜可口,香鲜味美. 菜品历史 <诗经>载:岂食其鱼,必河之鲤.<济南府志>上早有&qu ...

  10. Copycat - MemberShip

    https://github.com/atomix/copycat   http://atomix.io/copycat/docs/membership/   为了便于实现,Copycat把membe ...