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

第一部分:默认Logger支持

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

 {
"version": "1.0.0-*",
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
},
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Logging.Filter": "1.0.0"
},
"frameworks": {
"netcoreapp1.0": {
"imports": "dnxcore50"
}
}
}

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

 using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; namespace WebApiFrame
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// 注入MVC框架
services.AddMvc();
} public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
// 添加日志支持
loggerFactory.AddConsole();
loggerFactory.AddDebug(); // 添加MVC中间件
app.UseMvc();
}
}
}

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

第二部分:Logger日志级别

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

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

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

 using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; namespace WebApiFrame
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// 注入MVC框架
services.AddMvc();
} public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
// 添加日志支持 // 设置日志最小级别Warning
loggerFactory.AddConsole(LogLevel.Warning); //loggerFactory.AddDebug(); // 添加MVC中间件
app.UseMvc();
}
}
}

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

 using System;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using WebApiFrame.Models; namespace WebApiFrame.Controllers
{ [Route("api/[controller]")]
public class UsersController : Controller
{
private ILogger<UsersController> _logger; public UsersController(ILogger<UsersController> logger){
_logger = logger;
} [HttpGet("{id}")]
public IActionResult Get(int id)
{
// 演示日志输出
_logger.LogInformation("This is Information Log!");
_logger.LogWarning("This is Warning Log!");
_logger.LogError("This is Error Log!"); var user = new User() { Id = id, Name = "Name:" + id, Sex = "Male" };
return new ObjectResult(user);
} [HttpPost]
public IActionResult Post([FromBody] User user){
if(user == null){
return BadRequest();
} // TODO:新增操作
user.Id = new Random().Next(, );
return CreatedAtAction("Get", new { id = user.Id }, user);
} [HttpPut("{id}")]
public IActionResult Put(int id, [FromBody] User user){
if(user == null){
return BadRequest();
} // TODO: 更新操作
return new NoContentResult();
} [HttpDelete("{id}")]
public void Delete(int id){
// TODO: 删除操作 }
}
}

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

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

         public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
// 添加日志支持 // 设置日志最小输出级别为Error
loggerFactory.WithFilter(new FilterLoggerSettings()
{
// 设置以命名空间开头的日志的最小输出级别
{ "Microsoft", LogLevel.Warning },
{ "WebApiFrame", LogLevel.Error }
}).AddConsole(); //loggerFactory.AddDebug(); // 添加MVC中间件
app.UseMvc();
}

第三部分:NLog

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

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

 {
"version": "1.0.0-*",
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
},
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Logging.Filter": "1.0.0",
"NLog.Extensions.Logging": "1.0.0-rtm-alpha2"
},
"frameworks": {
"netcoreapp1.0": {
"imports": "dnxcore50"
}
}
}

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

 <?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogLevel="Warn"
internalLogFile="internal-nlog.txt"> <!-- define various log targets -->
<targets>
<!-- write logs to file -->
<target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log"
layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> <target xsi:type="File" name="ownFile-web" fileName="nlog-own-${shortdate}.log"
layout="${longdate}|${logger}|${uppercase:${level}}| ${message} ${exception}" /> <target xsi:type="Null" name="blackhole" />
</targets> <rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" /> <!--Skip Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>

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

 using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging; namespace WebApiFrame
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// 注入MVC框架
services.AddMvc();
} public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
// 添加日志支持
//loggerFactory.AddConsole();
//loggerFactory.AddDebug(); // 添加NLog日志支持
loggerFactory.AddNLog(); // 添加MVC中间件
app.UseMvc();
}
}
}

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

生成的日志文件和内容

第四部分、其他相关内容

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

         public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
// 添加日志支持
loggerFactory.AddConsole();
loggerFactory.AddDebug(); // 添加NLog日志支持
loggerFactory.AddNLog(); // 添加MVC中间件
app.UseMvc();
}

在.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的更多相关文章

  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

    本文转自:https://www.cnblogs.com/niklai/p/5662094.html 本篇是在上一篇的基础上添加日志功能,并记录NLog在Asp.Net Core里的使用方法. 第一部 ...

  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. Redis之有序集合命令

    Redis 有序集合(sorted set) Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.redis正是通过 ...

  2. 20170706wdVBA正则表达式提取题目

    Public Sub GetContents() Dim Reg As Object Dim Matches As Object Dim OneMatch As Object Dim Index As ...

  3. memcached客户端连接建立过程笔记

    memcached在启动过程初始化server_sockets时,根据启动参数决定系统是进行tcp监听还是udp监听,这里暂时只关注tcp的情况. server_socket在初始化时会向系统申请监听 ...

  4. Confluence 连接到一 LDAP 目录,权限对本地用户组设置为只读

    https://www.cwiki.us/display/CONFLUENCEWIKI/Connecting+to+an+LDAP+Directory

  5. 负载均衡中使用 Redis 实现共享 Session

    最近在研究Web架构方面的知识,包括数据库读写分离,Redis缓存和队列,集群,以及负载均衡(LVS),今天就来先学习下我在负载均衡中遇到的问题,那就是session共享的问题. 一.负载均衡 负载均 ...

  6. HDU-5050 Divided Land (二进制求GCD)

    题目大意:将两个二进制数的GCD用二进制数表示出来. 题目分析:这道题可以用java中的大数类AC. 代码如下: import java.io*; import java.math.BigIntege ...

  7. 第一个 MVC 应用程序(上半部分)(《精通 ASP.NET MVC5》 的第二章)

    本章将使用 ASP.NET MVC 框架创建一个简单的数据录入应用程序. 笔者会将过程分解成一个个的步骤,以便能够看出如何构造 ASP.NET MVC 应用程序.(对于一些未进行解释的内容,笔者提供了 ...

  8. 通过SVN获取变更列表,得到对应的最新class

    通过本地SVN获得未提交的文件列表获取工程中最新的class的方式参考: 增量部署代码利用批处理命令按原始结构复制指定的文件 新写了一个增强版,根据已提交至SVN的代码loglist,获取最新的cla ...

  9. quartz---的SimpleTrigger

    quartz---的SimpleTrigger package com.imooc.demo.helloQuartz; import java.text.SimpleDateFormat; impor ...

  10. Oracle连接知识

    Oracle基本连接知识   登录sys用户或 sysdba用户权限的账号   Sqlplus         建用户 Create user test identified by 12345678 ...