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

本篇是在上一篇的基础上添加日志功能,并记录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             // 设置日志最小级别Warning
20             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 : 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 }

三、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 <?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>

三、修改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对象的输出方法,所以就能看到上面出现的效果。

时间: 2024-12-24 05:25:25

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

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

本文记录了在Windows环境下安装Visual Studio Code开发工具..Net Core 1.0 SDK和开发一个简单的Web-Demo网站的全过程. 一.安装Visual Studio Code 安装文件下载地址:VS Code,当前最新版本是1.3. 推荐安装最新版,因为附带Debug插件,支持在vs code上进行断点调试. 二.安装.Net Core 1.0 SDK 安装文件下载地址:.Net Core SDK 三.创建一个.Net Core应用程序 1. 打开cmd窗口,创

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(十)-- 发布(Windows)

本篇将在这个系列演示的例子上继续记录Asp.Net Core在Windows上发布的过程. Asp.Net Core在Windows上可以采用两种运行方式.一种是自托管运行,另一种是发布到IIS托管运行. 第一部分.自托管 一.依赖.Net Core环境 修改 project.json 文件内容,增加发布时需要包含文件的配置内容 1 { 2 "version": "1.0.0-*", 3 "testRunner": "xunit&quo

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

本篇将结合这个系列的例子的基础上演示在Asp.Net Core里如何使用XUnit结合Moq进行单元测试,同时对整个项目进行集成测试. 第一部分.XUnit 修改 Project.json 文件内容,增加XUnit相关的nuget包引用,并修改部分配置. 1 { 2 "version": "1.0.0-*", 3 "testRunner": "xunit", // 设置测试工具为xunit 4 5 "buildOpt

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

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 本篇是在上一篇的基础上添加日志功能,并记录NLog在Asp.Net Core里的使用方法. 第一部分:默认Logger支持 一.project.json添加日志包引用,并在cmd窗口使用 dotnet restore 命令还原包文件. 1 {

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

本篇将介绍Asp.Net Core中一个非常重要的特性:依赖注入,并展示其简单用法. 第一部分.概念介绍 Dependency Injection:又称依赖注入,简称DI.在以前的开发方式中,层与层之间.类与类之间都是通过new一个对方的实例进行相互调用,这样在开发过程中有一个好处,可以清晰的知道在使用哪个具体的实现.随着软件体积越来越庞大,逻辑越来越复杂,当需要更换实现方式,或者依赖第三方系统的某些接口时,这种相互之间持有具体实现的方式不再合适.为了应对这种情况,就要采用契约式编程:相互之间依

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

本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Middleware功能支持. 在演示Middleware功能之前,先要了解一下Asp.Net管道模型发生了什么样的变化. 第一部分:管道模型 1. Asp.Net管道 在之前的Asp.Net里,主要的管道模型流程如下图所示: 请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象,封装此次请求有关的所有信息,然后进入HttpRuntime类进行进一步处理.H

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(二)-- Web Api Demo

在上一篇里,我已经建立了一个简单的Web-Demo应用程序.这一篇将记录将此Demo程序改造成一个Web Api应用程序. 一.添加ASP.NET Core MVC包 1. 在project.json文件添加Microsoft.AspNetCore.Mvc包 1 { 2 "version": "1.0.0-*", 3 "buildOptions": { 4 "debugType": "portable",

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

在上一篇里,介绍了中间件的相关内容和使用方法.本篇将介绍Asp.Net Core MVC框架的过滤器的相关内容和使用方法,并简单说明一下与中间件的区别. 第一部分.MVC框架内置过滤器 下图展示了Asp.Net Core MVC框架默认实现的过滤器的执行顺序: Authorization Filters:身份验证过滤器,处在整个过滤器通道的最顶层.对应的类型为: AuthorizeAttribute.cs Resource Filters:资源过滤器.因为所有的请求和响应都将经过这个过滤器,所以

【免费视频】使用VS Code开发ASP.NET Core WebAPI应用程序

1.使用VS Code开发ASP.NET Core WebAPI应用程序 1.使用Visual Studio Code开发Asp.Net Core基础入门实战 毕竟从.net过度过来的我们已经习惯了使用Microsoft的Visual Studio进行开发.那么有没有一款媲美Visual Studio的开发工具可以让我们能够在Linux系统上进行高效的.NET Core开发呢?答案是肯定的,因为微软已经开发了一个名为Visual Studio Code的跨平台和开源的文本编辑器.Visual S