[.Net Core] 在 Mvc 中简单使用日志组件
在 Mvc 中简单使用日志组件
基于 .Net Core 2.0,本文只是蜻蜓点水,并非深入浅出。
目录
- 使用内置的日志组件
- 简单过渡到第三方组件 - NLog
使用内置的日志
下面使用控制器 HomeController.cs 进行演示。
需要 using Microsoft.Extensions.Logging;
方案一:
public class HomeController : Controller
{
private readonly ILogger _logger ; public HomeController(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger(typeof(HomeController));
}
}
方案二:
public class HomeController : Controller
{
private readonly ILogger _logger ; public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
}
方案三:
public class HomeController : Controller
{
private readonly ILogger _logger ; public HomeController(ILogger logger)
{
_logger = logger;
}
}
三种都是通过注入的方式获取日志记录器对象,在过去,我们会自己独立封装类似这些 Debug、Info 和 Error 等不同日志等级的方法,现在我们看看内置的方法是如何使用的?
在 HomeController 内添加 Index() 方法进行测试。
public IActionResult Index()
{
_logger.LogDebug($"测试:{DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
_logger.LogError($"测试:{DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
_logger.LogInformation($"测试:{DateTime.Now.ToString(CultureInfo.InvariantCulture)}"); return Json(Guid.NewGuid());
}
在输出结果中我们可以看到,不同日志的等级在控制台中会以不同的颜色进行标注。
每种级别的 Log 都有多个方法重载,如 LogInformation() ,示例演示的代码中使用的是比较简单一种,也就是最后一种。
//
// 摘要:
// Formats and writes an informational log message.
//
// 参数:
// logger:
// The Microsoft.Extensions.Logging.ILogger to write to.
//
// eventId:
// The event id associated with the log.
//
// message:
// Format string of the log message.
//
// args:
// An object array that contains zero or more objects to format.
public static void LogInformation(this ILogger logger, EventId eventId, string message, params object[] args);
//
// 摘要:
// Formats and writes an informational log message.
//
// 参数:
// logger:
// The Microsoft.Extensions.Logging.ILogger to write to.
//
// exception:
// The exception to log.
//
// message:
// Format string of the log message.
//
// args:
// An object array that contains zero or more objects to format.
public static void LogInformation(this ILogger logger, Exception exception, string message, params object[] args);
//
// 摘要:
// Formats and writes an informational log message.
//
// 参数:
// logger:
// The Microsoft.Extensions.Logging.ILogger to write to.
//
// message:
// Format string of the log message.
//
// args:
// An object array that contains zero or more objects to format.
public static void LogInformation(this ILogger logger, string message, params object[] args);
其它细节以及详情,或者希望使用其它日志组件可参考官方文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?tabs=aspnetcore2x
简单过渡到第三方组件 - NLog
Nuget 安装 NLog.Web.AspNetCore(目前 Nuget 最新为 4.4.1,但是官方的教程却是 4.5 的,小编使用 4.4.1 进行演示)。如需 4.5+ 可参考官方:https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2
下面演示如何将内置的组件简单的移植到 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="info"
internalLogFile="c:\temp\internal-nlog.txt"> <!-- the targets to write to -->
<targets>
<!-- write logs to file -->
<target xsi:type="File" name="allfile" fileName="c:\temp\nlog-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" /> <!-- another file log, only own logs. Uses some ASP.NET core renderers -->
<target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-own-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
</targets> <!-- rules to map from logger name to target -->
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" /> <!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxLevel="Info" final="true" /> <!-- BlackHole without writeTo -->
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>
修改 Startup.cs 类中的 Configure() 方法,其它地方都不需要做出任何修改。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddNLog(); //添加NLog
env.ConfigureNLog("nlog.config"); //读取Nlog配置文件 //...
}
启动程序,你会发现:
【原文】http://www.cnblogs.com/liqingwen/p/8613538.html
相关的文章:
《[.Net Core] 简单使用 Mvc 内置的 Ioc》
《[.Net Core] 简单使用 Mvc 内置的 Ioc(续)》
[.Net Core] 在 Mvc 中简单使用日志组件的更多相关文章
- Asp.Net Core中简单使用日志组件log4net
本文将简单介绍在.NET 6中使用log4net的方法,具体见下文范例. 1.首先新建一个ASP.NET Core空项目 2.通过Nuget包管理器安装下面两个包 log4net Microsoft. ...
- setbuffer和freopen做一个简单的日志组件
目标场景是这样的: 多线程的应用程序要频繁打一些小字节的日志,也不想引用很重的日志库. 设想了一个极其简单的日志组件,main线程中重定向stdout到文件,同时setbuffer设置一个10k的缓冲 ...
- 使用SeasLog打造PHP项目中的高性能日志组件(一)
云智慧(北京)科技有限公司 高驰涛 什么是SeasLog SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便.规范.高效地写日志,以及快速地读取和查询日志. 为 ...
- [AspNetCore 3.0] 在RazorPages/MVC 中使用 Blazor (Razor组件)
开发环境 Vs2019 16.3.1 dotnetcore 3.0 一.开始 新建webapp项目 dotnet new webapp -o projectname 或Vs 中新建项目选择 Web应用 ...
- 【ASP.NET Core】MVC中自定义视图的查找位置
.NET Core 的内容处处可见,刷爆全球各大社区,所以,老周相信各位大伙伴已经看得不少了,故而,老周不考虑一个个知识点地去写,那样会成为年度最大的屁话,何况官方文档也很详尽.老周主要扯一下大伙伴们 ...
- MVC 中dapper的日志功能+程序报错修改
由于之前的项目说最好要有日志功能,正好之前看过几篇这方面的文章就弄了点东西. 这是EF日志受启发很大的一个原文: http://www.cnblogs.com/GuZhenYin/p/5556732. ...
- mvc中简单的异常记录
说明:异常处理 1.1 在WebApp的Model中 添加异常处理类 继承于HandleErrorAttribute using System; using System.Collections.Ge ...
- Asp.Net MVC中记录错误日志保存到本地txt文件
为了方便查询系统出错弄个错误日志出来对于维护运维来说是很有必要的. 1.在Asp.Net MVC项目中的App_Start添加一个用于处理异常类的文件ErrorLog让他继承HandleErrorAt ...
- ASP.NET MVC中简单使用Autofac
项目中引入Autofac的目的是为了实现控制反转,即IoC,Inversion of Control.控制反转可以有效的降低类之间的相互依赖关系,增加架构的弹性,降低软件复杂度. 示例代码: IPro ...
随机推荐
- 构造N位格雷码(递归,面向对象)
问题:递归打印出N位格雷码(相邻两个编码只有一位数字不同): 问题化归为:现有前N位的格雷码,如何构造N+1位的格雷码? 解决方法:采用递归构造格雷码集和. 递归出口:n = 1; 此时格雷码{0,1 ...
- wpf 如何让控件左右移动
通过DoubleAnimation可以让控件进行左右移动. <Canvas x:Name="canvas_Shape" HorizontalAlignment="S ...
- HDU - 1850 Nim博弈
思路:可以对任意一堆牌进行操作,根据Nim博弈定理--所有堆的数量异或值为0就是P态,否则为N态,那么直接对某堆牌操作能让所有牌异或值为0即可,首先求得所有牌堆的异或值,然后枚举每一堆,用已经得到的异 ...
- AnsibleAPI源码剖析(1)-Runner类的 初始化
#ansible版本说明:ansible1.9.1 1.简单使用例子 # -*- coding=utf-8 -*- import ansible.runner #################### ...
- 我的Java设计模式-原型模式
"不好意思,我是卧底!哇哈哈哈~"额......自从写了上一篇的观察者模式,就一直沉浸在这个角色当中,无法自拨.昨晚在看<使徒行者2>,有一集说到啊炮仗哥印钞票,我去, ...
- C++的AES加解密
最近公司项目要做个WPF程序,但是底层加密部分要用C++来实现.通过网上搜索各种资料,地址已经记不下了,没发贴出来了! 下面看看如何加解密的~!先贴代码.... string tKey(sKey); ...
- 在bmp上添加字符2
void CTextOnbmpDlg::OnButton2() { // TODO: Add your control notification handler code here FILE *f ...
- VS2005 添加onTimer定时器
SetTimer(1,300,NULL); void CchangeDisplayDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调 ...
- hi3531串口波特率计算
波特率配置 通过配置寄存器UART_IBRD 和UART_FBRD 可以设置UART 工作的波特率,波特率 计算公式为: 当前波特率=UART 参考时钟频率(1/2 总线时钟频率)/(16 x 分频系 ...
- R语言学习笔记︱Echarts与R的可视化包——地区地图
笔者寄语:感谢CDA DSC训练营周末上完课,常老师.曾柯老师加了小课,讲了echart与R结合的函数包recharts的一些基本用法.通过对比谢益辉老师GitHub的说明文档,曾柯老师极大地简化了一 ...