本文转自: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. ES6 学习笔记之四 对象的扩展

    ES6 为对象字面量添加了几个实用的功能,虽然这几个新功能基本上都是语法糖,但确实方便. 一.属性的简洁表示法 当定义一个对象时,允许直接写入一个变量,作为对象的属性,变量名就是属性名. 例1: , ...

  2. CSharp如何自定义鼠标样式

    一.如何设置鼠标样式? 在CSharp的WinForm开发中,可以通过下面的API设置鼠标样式: //把鼠标样式设置为十字(系统自带的一种鼠标样式) this.Cursor = Cursors.Cro ...

  3. C# winform 去掉button的边框颜色

    Winform的话,设置FlatStyle为Flat,并且设置FlatAppearance下的BorderSize为0,foreColor设置成web下的Transparent

  4. Android studio项目预览的时候提示错误ActionBarOverlayLayout

    android studio打开项目(别人的demo),提示页面没法预览.截图如下 根据查询,是主题没法正常显示,需要修改样式.样式文件的路径为res\values\styles.xml,截图如下. ...

  5. C# 实现邮件代发

    由于自己很好奇,有一些推广之类的 邮件,发件人后面,都有一个 由 .... 代发. 所以,查找了一些资料,来验证了一下实现方法. 咱们先来看看,实现代发的 理想效果图 当然,这一种,是利用 代发的 邮 ...

  6. 在.net Core 使用PDF模板文件生成PDF文件,代替WEB打印控件!

    这几天找WEB打印控件,要么收费的,要么免费的只能在IE里用! 我只想简单的打个标签纸!百度2天,看到一老兄说可以用PDF,然后又开始百度..找到了一篇文章 http://www.jianshu.co ...

  7. 将tomcat添加到服务中

    转载自:http://blog.csdn.net/zjd934784273/article/details/47701011(windows) :http://www.cnblogs.com/ilah ...

  8. mysql数据库binlog日志的异地备份

    MySQL数据库的二进制日志binlog记录了对数据库的全量DDL和DML操作,对数据库的point to point灾难恢复起着无法替代的关键作用.因此,基于此类考虑,需要对生产环境产生的binlo ...

  9. Math-645. Set Mismatch

    The set S originally contains numbers from 1 to n. But unfortunately, due to the data error, one of ...

  10. Google Guava 类库简介

    Guava 是一个 Google开发的 基于java的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency librar ...