本篇是在上一篇的基础上添加日志功能,并记录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的更多相关文章
-
使用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
本文转自:https://www.cnblogs.com/niklai/p/5662094.html 本篇是在上一篇的基础上添加日志功能,并记录NLog在Asp.Net Core里的使用方法. 第一部 ...
-
使用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 ...
随机推荐
-
UI第十二节
- (void)viewDidLoad { [super viewDidLoad]; UIButton *btn = [UIButton buttonWithType:UIButt ...
-
2014江西理工大学C语言程序竞赛高级组
Beautiful Palindrome Number 题意:求N里面有多少个符合要求的数字(数字要求:回文数,且前一半部分是不严格递增) 解法:打表 #include<bits/stdc++. ...
-
[codevs3295]落单的数
题目描述 Description 有n个数(n是奇数),其中n-1个数两两成对,有1个数落单,找出这个数.要求O(n)的时间复杂度,O(1)的空间复杂度 输入描述 Input Description ...
-
做量化模型Matlab、R、Python、F#和C++到底选择哪一个?
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室).是由美国mathworks公司发布的主要面对科学计算.可视化以及交互式程序设计的高科技计算环境.它将数 ...
-
javascript this的一些误解
太拘泥于"this"的字面意思就会产生一些误解.有两种常见的对于this 的解释,但是它们都是错误的. 1.指向自身 人们很容易把this 理解成指向函数自身,这个推断从英语的语法 ...
-
HBase跨版本数据迁移总结
某客户大数据测试场景为:Solr类似画像的数据查出用户标签--通过这些标签在HBase查询详细信息.以上测试功能以及性能. 其中HBase的数据量为500G,Solr约5T.数据均需要从对方的集群人工 ...
-
Gitlab安装、汉化及使用
环境:centos 关闭防火墙和selinux [root@Gitlab ~]# setenforce [root@Gitlab ~]# service iptables stop && ...
-
[CF52C]Circular RMQ【线段树】
题目大意 给你一个环形数列,完成环形数列上区间加法和区间求最小值. 分析 算是一道比较水的线段树模板题. 如果l>r的话,那么修改l,n和1,r区间. 不然的话那么就修改l,r区间. 其他的基础 ...
-
MapReduce实现矩阵乘法
简单回想一下矩阵乘法: 矩阵乘法要求左矩阵的列数与右矩阵的行数相等.m×n的矩阵A,与n×p的矩阵B相乘,结果为m×p的矩阵C.具体内容能够查看:矩阵乘法. 为了方便描写叙述,先进行如果: 矩阵A的行 ...
-
python---方法解析顺序MRO(Method Resolution Order)<;以及解决类中super方法>;
MRO了解: 对于支持继承的编程语言来说,其方法(属性)可能定义在当前类,也可能来自于基类,所以在方法调用时就需要对当前类和基类进行搜索以确定方法所在的位置.而搜索的顺序就是所谓的「方法解析顺序」(M ...