华域联盟 .Net .NET Core3.0 日志 logging的实现

.NET Core3.0 日志 logging的实现

.NET Core3.0 日志 logging的实现
 更新时间:2020年10月26日 11:49:11   作者:李明成  

这篇文章主要介绍了.NET Core3.0 日志 logging的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

多年的经验,日志记录是软件开发的重要组成部分。没有日志记录机制的系统不是完善的系统。在开发阶段可以通过debug附件进程进行交互调试,可以检测到一些问题,但是在上线之后,日志的记录起到至关重要的作用。它可使我们在系统出现问题之后,排查错误提供依据。
.NET Core3.0内置多种日志记录程序,并且有第三方提供的日志记录程序框架如:log4net,NLog,Serilog,elmah.io等。后面会介绍前三种日志框架如何与.NETcore3.0结合起来进行使用。
内置日志记录提供程序
ASP.NETCore 提供以下提供程序:

控制台-可以在控制台查看日志输出
调试-vs工具 -》开始调试-》输出窗口进行查看日志输出
EventSource-可使用PerfView 实用工具收集和查看日志
EventLog-》仅在windows系统下可以使用事件查看器查看日志
TraceSource
AzureAppServicesFile
AzureAppServicesBlob
ApplicationInsights

创建使用日志
通用主机的应用程序和非主机应用程序使用的方式也是不同的。因为通用主机内部封装了 依赖注入、logging、配置、IHostedService的实现;并且默认配置了控制台,调试,EventSource以及EventLog(仅当在windows上运行时)提供程序。源码如下

.ConfigureLogging((hostingContext, logging) =>
{
var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);

// IMPORTANT: This needs to be added *before* configuration is loaded, this lets
// the defaults be overridden by the configuration.
if (isWindows)
{
// Default the EventLogLoggerProvider to warning or above
logging.AddFilter<EventLogLoggerProvider>(level => level >= LogLevel.Warning);
}

logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();

if (isWindows)
{
// Add the EventLogLoggerProvider on windows machines
logging.AddEventLog();
}
})

通用主机
添加提供程序
可自行选择提供程序来替换默认提供程序。在CreateHostBuilder时候 调用ClearProviders(),然后添加所需的提供程序。我们创建一个api项目为例

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();//去掉默认添加的日志提供程序
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
logging.AddEventLog();
//logging.AddTraceSource();

})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})

创建日志
在 Web 应用或托管服务中,由依赖关系注入 (DI) 获取 ILogger。

private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;

//可以显示指定类别名称ILoggerFactory logger
//logger.CreateLogger("WebApi.Controllers.WeatherForecastController");
}

[HttpGet] public IEnumerable<WeatherForecast> Get()
{
//内置日志
_logger.LogTrace(1000, "log Trace msg"); //
_logger.LogDebug(1001, "log Debug msg"); //
_logger.LogInformation(1002, "log Information msg"); //
_logger.LogWarning(1003, "log Warning msg"); //
_logger.LogError(1004, "log Error msg"); //
_logger.LogCritical(1005, "log Critical msg"); //

非主机控制台
添加提供程序
在创建 LoggerFactory 时调用提供程序的 Add{provider name} 扩展方法:

var loggerFactory = LoggerFactory.Create(builder =>
{
builder
.AddFilter("Microsoft", LogLevel.Warning)
.AddFilter("System", LogLevel.Warning)
.AddFilter("LoggingConsoleApp.Program", LogLevel.Debug)
.AddConsole()
.AddEventLog();
});

创建日志
在非主机控制台应用中,使用 LoggerFactory 来创建 ILogger。

ILogger logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("非主机模式输出log message");
·
运行输出

第三方日志框架
log4net,NLog和Serilog这3种日志记录框架几乎在.NET空间中占主导地位,不需要太多介绍。看看最近6周的下载排名就知道了。如图

log4net 在NET Core 3.0使用

引用Log4net到项目中,安装NuGet包

Install-Package log4net -Version 2.0.8

在项目中添加log4net.config文件,右键改文件属性-》复制到输出目录选择-》始终复制

<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="loglog4net.log" />
<appendToFile value="true" />
<maximumFileSize value="50KB" />
<maxSizeRollBackups value="2" />

<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %message%newline" />
</layout>
</appender>

<root>
<level value="ALL" />
<appender-ref ref="RollingFile" />
</root>
</log4net>

在Startup文件中添加log4net配置的文件

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseLog4net();
/// <summary>
/// 使用log4net配置
/// </summary>
/// <param name="app"></param>
/// <returns></returns>
public static IApplicationBuilder UseLog4net(this IApplicationBuilder app)
{
var logRepository = log4net.LogManager.CreateRepository(Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));
log4net.Config.XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
return app;
}
上面两步的准备完成之后,在Controllers中使用
private readonly ILog log;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
this.log = LogManager.GetLogger(typeof(WeatherForecastController));
} [HttpGet] public IEnumerable<WeatherForecast> Get()
{
//第三方日志
log.Error("log4net erro msg"); //log4net

运行查看日志文件

NLog 在NET Core 3.0使用

引用NLog到项目中,安装NuGet包

Install-Package NLog.Web.AspNetCore -Version 4.9.0
Install-Package NLog -Version 4.6.7

添加配置文件nlog.config

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogLevel="Info"
internalLogFile="internal-nlog.txt">

<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>

<!-- the targets to write to -->
<targets>
<!-- write logs to file -->
<target xsi:type="File" name="allfile" fileName="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="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>

在Program.cs文件配置 Main方法添加

NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();

CreateHostBuilder方法添加

.UseNLog() //NLog: Setup NLog for Dependency injection

使用

[HttpGet] public IEnumerable<WeatherForecast> Get()
{
//内置日志
_logger.LogTrace(1000, "log Trace msg"); //
_logger.LogDebug(1001, "log Debug msg"); //
_logger.LogInformation(1002, "log Information msg"); //
_logger.LogWarning(1003, "log Warning msg"); //
_logger.LogError(1004, "log Error msg"); //
_logger.LogCritical(1005, "log Critical msg"); //

Serilog 在NET Core 3.0使用

引用Serilog到项目中,安装NuGet包

Install-Package Serilog.AspNetCore -Version 3.1.0

在Program.cs文件进行Logger初始化
Main方法添加

Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Console()// 配置日志输出到控制台
.WriteTo.File("logserilog.txt", rollingInterval: RollingInterval.Day) //配置日志输出文件,生成周期每天
.CreateLogger();
try
{
Log.Information("Starting up");
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Application start-up failed");
}
finally
{
Log.CloseAndFlush();
}

运行输出:

小结:本文主要讲解NET Core3.0内置的日志提供程序和与第三方日志框架(Log4net,Nlog,Serilog)的使用。
到此这篇关于.NET Core3.0 日志 logging的实现的文章就介绍到这了,更多相关.NET Core3.0 日志 logging内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:.net core日志结构化.net core 使用阿里云分布式日志的配置方法ASP.NET Core扩展库之Http日志的使用详解ASP.NET Core扩展库之日志功能的使用详解.NET Core下使用Log4Net记录日志的方法步骤Asp.Net Core用NLog记录日志操作方法.NET Core开发日志之OData(Open Data Protocol).NET Core日志配置的方法详解.Net Core中的日志组件(Logging).Net Core项目如何添加日志功能详解详解.Net core2.0日志组件Log4net、Nlog简单性能测试.net core日志系统相关总结

.NET
Core3.0
日志
logging

相关文章
asp.net模板引擎Razor中cacheName的问题分析这篇文章主要介绍了asp.net模板引擎Razor中cacheName的问题,实例分析了cacheName在提高编译效率方面的使用技巧,需要的朋友可以参考下 2015-06-06
理解HttpHandler,并为所有*.jpg图片生成一段文字于图片上HttpHandler就是最终相应HTTP请求,生成HTTP响应的处理器,他们的实例由asp.net运行时创建,,并生存在asp.net的运行时环境中,如果asp.net运行时是处理请求的工厂,HttpHandler是处理请求的工人 2012-03-03
解决 .NET Core 中 GetHostAddressesAsync 引起的 EnyimMemcache这篇文章主要介绍了解决 .NET Core 中 GetHostAddressesAsync 引起的 EnyimMemcached 死锁问题的相关资料,需要的朋友可以参考下 2016-09-09
asp.net core应用docke部署到centos7的全过程这篇文章主要给大家介绍了关于asp.net core应用docke部署到centos7的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2020-08-08
ASP.NET Core扩展库之Http通用扩展库的使用详解这篇文章主要介绍了ASP.NET Core扩展库之Http通用扩展库的使用详解,帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下 2021-04-04
MVC4制作网站教程第四章 删除栏目4.4这篇文章主要为大家详细介绍了MVC4制作网站教程,删除栏目功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2016-08-08
DropDownList添加客户端下拉事件操作我们知道,DropDownList下拉框是一个服务器控件,有时候,有些朋友为了方便绑定DropDownList下拉框的选项,但又想在DropDownList实现客户端的下拉事件,那该怎么实现呢? 2015-09-09
ASP.NET技巧:为Blog打造个性日历ASP.NET技巧:为Blog打造个性日历... 2006-09-09
ASP.NET设计FTP文件上传的解决方案这篇文章主要介绍了ASP.NET设计FTP文件上传的解决方案,需要的朋友可以参考下 2015-09-09
.Net Core自定义配置源从配置中心读取配置的方法这篇文章主要给大家介绍了关于.Net Core自定义配置源从配置中心读取配置的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 2019-03-03

最新评论

本文由 华域联盟 原创撰写:华域联盟 » .NET Core3.0 日志 logging的实现

转载请保留出处和原文链接:https://www.cnhackhy.com/5040.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部