使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
2016-07-12 00:07
931 查看
第一部分:默认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(1, 10); 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对象的输出方法,所以就能看到上面出现的效果。
相关文章推荐
- 用ASP.NET Core 1.0中实现邮件发送功能-阿里云邮件推送篇
- win10x64配置IIS访问asp,能够使用Microsoft.Jet.OLEDB.4.0
- asp与java的结合|!
- ASP.NET MVC学习之路由篇(3)
- ASP.NET MVC学习之路由篇(2)
- 为ASP.NET MVC应用添加自定义路由
- Introduction to ASP.NET Web Programming Using the Razor Syntax (C#)
- ASP.NET MVC学习之路由篇(1)
- Cglib,asm,Aspect,JDK原生的代理模式这四种有哪些差别,原理各是什么?
- ASP.NET MVC学习之控制器篇(二)
- ASP.NET MVC学习之控制器篇
- [转] c# 模拟Asp.net页面中的某个按钮的点击,向web服务器发出请求
- WebForm页面生命周期及asp.net运行机制
- WebForm页面生命周期及asp.net运行机制
- Robi改造计划更新---moveit终于在树莓派raspberry 3B(raspbian<Jessie>, ROS Indigo版本)上安装好了
- Mixing ASP.NET Webforms and ASP.NET MVC
- ASP.NET中Ajax怎么使用
- ASP.NET的内置对象之三 Session
- ASP.net Core 部署说明(Ubuntu)
- Asp.net core mvc里面怎么添加全局的Filter