[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
本文转自: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对象的输出方法,所以就能看到上面出现的效果。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出作者名和原文连接,否则保留追究法律责任的权利。
[转]使用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 ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(八)-- 多环境开发
本篇将演示Asp.Net Core如何在多环境下进行开发适配. 在一个正规的开发流程里,软件开发部署将要经过三个阶段:开发.测试.上线,对应了三个环境:开发.测试.生产.在不同的环境里,需要编写不同的 ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(十)-- 发布(Windows)
本篇将在这个系列演示的例子上继续记录Asp.Net Core在Windows上发布的过程. Asp.Net Core在Windows上可以采用两种运行方式.一种是自托管运行,另一种是发布到IIS托管运 ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(九)-- 单元测试
本篇将结合这个系列的例子的基础上演示在Asp.Net Core里如何使用XUnit结合Moq进行单元测试,同时对整个项目进行集成测试. 第一部分.XUnit 修改 Project.json 文件内容, ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
本篇是在上一篇的基础上添加日志功能,并记录NLog在Asp.Net Core里的使用方法. 第一部分:默认Logger支持 一.project.json添加日志包引用,并在cmd窗口使用 dotnet ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(七)-- 结构化配置
本篇将记录.Net Core里颇有特色的结构化配置的使用方法. 相比较之前通过Web.Config或者App.Config配置文件里使用xml节点定义配置内容的方式,.Net Core在配置系统上发生 ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(六)-- 依赖注入
本篇将介绍Asp.Net Core中一个非常重要的特性:依赖注入,并展示其简单用法. 第一部分.概念介绍 Dependency Injection:又称依赖注入,简称DI.在以前的开发方式中,层与层之 ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(五)-- Filter
在上一篇里,介绍了中间件的相关内容和使用方法.本篇将介绍Asp.Net Core MVC框架的过滤器的相关内容和使用方法,并简单说明一下与中间件的区别. 第一部分.MVC框架内置过滤器 下图展示了As ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(四)-- Middleware
本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Middleware功能支持. 在演示Middleware功能之前,先要了解一下Asp ...
随机推荐
- .net core 读取本地指定目录下的文件
项目需求 asp.net core 读取log目录下的.log文件,.log文件的内容如下: xxx.log ------------------------------------------beg ...
- 开源且功能强大的C# 扩展方法类库Pure.Ext,包含1000+个拓展方法 (支持.Net Framework和.Net Core)
先上地址 Github: https://github.com/purestackorg/pure.ext Gitee: https://gitee.com/purestack/pure.ext 扩展 ...
- 《JavaScript高级程序设计》3.7 函数
位于return语句之后的代码不会执行; return语句也可以不带有任何返回值. 这种情况下, 函数在停止执行后会返回undefined值. 这种用法一般用在需要提前停止函数执行而又不需要返回值的情 ...
- 用ndp部署storm应用
本文由作者余宝虹授权网易云社区发布. 使用户ndp部署一个Java应用大家都非常熟悉的,但是看到某些同学用非常繁琐的方式部署storm应用的时候,我觉得很有必要整一个帮助教程,ndp帮助文档里面没有, ...
- 登录状态保持Session/Cookie
登录成功: 1.Session保存User对象. 2.Cookie保存唯一值UserID(或者usercode)和加密Sign(生成规则自己定义,MD5用户名,用户ID,私有串等),并设置过期时间. ...
- 程序媛计划——python正则表达式
#定义 正则表达式是对字符串操作的一种逻辑公式,通过它我们能筛选过滤出我们需要的内容,如判断一串数字是否是电话号码. #原理 先把正则表达式的字符串转换成 Pattern 对象,接着用这个对象处理文本 ...
- 898. Bitwise ORs of Subarrays
We have an array A of non-negative integers. For every (contiguous) subarray B = [A[i], A[i+1], ..., ...
- clang 编译 OC
clang -fobjc-arc -framework Foundation helloworld.m -o helloworld.out OVERVIEW: clang LLVM compiler ...
- docker镜像基本操作一
获取镜像 首先说明一下如何从Docker hub中获取高质量的镜像,从Docker镜像库获取镜像的命令是docker pull .其命令格式为: docker pull [选项] [Docker Re ...
- iOS-消除CocoaPods内容警告
前言 2018年2月26日 农历正月十一 星期一 今天就想更新下博客,内容不多,心情复杂: 突然想吟诗一首: 其实,我是一个善良的人: 其实,我是一枚... 算了,还是说正事吧 消除CocoaPods ...