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

本篇是在上一篇的基础上添加日志功能,并记录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对象的输出方法,所以就能看到上面出现的效果。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 基于Quartz.net的远程任务管理系统 一

    在上一篇绪中,已经介绍了整个项目的情况下了,接下来就是开始一步步做起来了. 首先:先整个我们的Job任务表,以及Job执行日志表.SQL如下: drop table if exists job_inf ...

  2. NET 读取Word文档信息

    1.添加程序集引用:WindowsBase 2.添加nuget:DocumentFormat.OpenXml 3.代码: var wordPath = @"C:\xxx.docx" ...

  3. Openwrt 远程调试

    此文已由作者吴志勐授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文以自己的程序WFD为例: 1,为路由器固件刷上gdbserver 在宿主端,使用make menucon ...

  4. AGC032D Rotation Sort

    题目传送门 Description 给定\(N\)的排列(\(N\leq5000\)),将任一区间最左侧的数插到该区间最右边的代价为\(A\),将任一区间最右侧的数插到该区间最左边的代价为\(B\), ...

  5. D - 统计同成绩学生人数

    点击打开链接 读入N名学生的成绩,将获得某一给定分数的学生人数输出.  Input 测试输入包含若干测试用例,每个测试用例的格式为  第1行:N  第2行:N名学生的成绩,相邻两数字用一个空格间隔.  ...

  6. C - 前m大的数 (结构体)

    点击打开链接 还记得Gardon给小希布置的那个作业么?(上次比赛的1005)其实小希已经找回了原来的那张数表,现在她想确认一下她的答案是否正确,但是整个的答案是很庞大的表,小希只想让你把答案中最大的 ...

  7. django url 路由设置技巧

    Django的url使用方法 利用Django开发站点.能够设计出很优美的url规则,假设url的匹配规则(包括正則表達式)组织得比較好,view的结构就会比較清晰.比較easy维护. 最简单的形式 ...

  8. Zookeeper原理分析之存储结构ZkDatabase

    ZKDatabase在内存中维护了zookeeper的sessions, datatree和commit logs集合. 当zookeeper server启动的时候会将txnlogs和snapsho ...

  9. 2 rocketmq mqadmin 的用法详解

    参考文档 http://jameswxx.iteye.com/blog/2091971 1.1. 控制台使用 RocketMQ 提供有控制台及一系列控制台命令,用于管理员对主题,集群,broker 等 ...

  10. 前端小例子 基础js css html练习

    前情提要: 学前端也有一阵了,个人感觉前端还是重要的. html 学习教程 https://www.cnblogs.com/baili-luoyun/p/10466040.html css 教程 js ...