一 简介

无论是微服务还是其他任何分布式系统,都需要一个统一处理日志的系统,这个系统

必须有收集,索引,分析查询的功能。asp

.net core自己的日志是同步方式的,正如文档所言:

所以必须自己提供一个日志提供程序,那正如文档所言,还有什么比kafka更合适的呢。

从kafka往后那就是elasticsearch      kibana,那是自然而然的事情。

二 asp.net core 日志详解

概念

类别:类别是以使用的用途进行分类的,比如var log= LoggerFac.CreateLogger<Startup>();这一句,

以StartUp类的全名作为一个分类,还有一些内置的system,Microsoft,主要是为了更细粒度控制日志。

如果StartUp类出现了问题,打印日志就可以控制在StartUp这一类别下,为这个类别设置debug,

仅仅打印这个类别这个级别的日志信息,使用filter功能可以很容易控制。

日志级别:Trace,debug,info,warning,error等

Trace:因为可以看到组件内部运行状况,而且会有很大安全隐患,所以不建议在生产开启这个功能,

比如mysql lib库的trace可以打印出数据库连接字符串的。

日志提供程序:日志提供程序可以看作日志信息的的io重定向。

控制台:这个不用说了。

调试:就是debug,在 Linux 中,此提供程序将日志写入 /var/log/message。

在windows中就是经典的System.Diagnostics.Debug功能,这是.net提供的调试功能,

非常详细,在开发中非常有用,而且通过配置可以自定义存储,比如一个log文件。

下面是vs中最常见的。

EventSource 提供程序在windows下可用,在linux下没可用但是没有相关事件,所以和没用一样。

Windows EventLog 提供程序和TraceSource 提供程序都是在windows环境下是使用。

三 开发

添加各种事件提供程序:因为是windows下所以EventSource事件是可以用的。

 var host = new WebHostBuilder().ConfigureAppConfiguration((webHostBuild,configBuild) =>
{
var env = webHostBuild.HostingEnvironment; configBuild.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json"
,optional:true,reloadOnChange:true)
.SetBasePath(Directory.GetCurrentDirectory());
}).ConfigureLogging((hostingContext, logging) => {
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"))
.AddConsole()
.AddDebug()
.AddEventSourceLogger();
}).UseKestrel()
.UseStartup<Startup>();
host.Start();
Console.ReadKey();
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}

日志配置:默认日志debug,system分类info级别,Microsoft分类是info级别。

这个LogLevel下的节点就是日志筛选功能。

{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}

windows运行效果:只给加console

testtesttest
dbug: Walt.TestMcroServoces.Webapi.Startup[]
服务配置完成
dbug: Microsoft.AspNetCore.Hosting.Internal.WebHost[]
Hosting starting
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
User profile is available. Using 'C:\Users\Administrator\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
dbug: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[]
Reading data from file 'C:\Users\Administrator\AppData\Local\ASP.NET\DataProtection-Keys\key-7fc5773e-c3fa-4523-b57f-aee522ecc0c2.xml'.
dbug: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[]
Reading data from file 'C:\Users\Administrator\AppData\Local\ASP.NET\DataProtection-Keys\key-b6c77378-6ca9-4d96-a5e2-f5952a8c2a6f.xml'.
dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
Found key {7fc5773e-c3fa--b57f-aee522ecc0c2}.
dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
Found key {b6c77378-6ca9-4d96-a5e2-f5952a8c2a6f}.
dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver[]
Considering key {7fc5773e-c3fa--b57f-aee522ecc0c2} with expiration date -- ::30Z as default key.
dbug: Microsoft.AspNetCore.DataProtection.TypeForwardingActivator[]
Forwarded activator type request from Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiXmlDecryptor, Microsoft.AspNetCore.DataProtection, Version=2.0.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 to Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiXmlDecryptor, Microsoft.AspNetCore.DataProtection, Culture=neutral, PublicKeyToken=adb9793829ddae60
dbug: Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiXmlDecryptor[]
Decrypting secret element using Windows DPAPI.
dbug: Microsoft.AspNetCore.DataProtection.TypeForwardingActivator[]
Forwarded activator type request from Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=2.0.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 to Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Culture=neutral, PublicKeyToken=adb9793829ddae60
dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.CngCbcAuthenticatedEncryptorFactory[]
Opening CNG algorithm 'AES' from provider '(null)' with chaining mode CBC.
dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.CngCbcAuthenticatedEncryptorFactory[]
Opening CNG algorithm 'SHA256' from provider '(null)' with HMAC.
dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[]
Using key {7fc5773e-c3fa--b57f-aee522ecc0c2} as the default key.
dbug: Microsoft.AspNetCore.DataProtection.Internal.DataProtectionStartupFilter[]
Key ring with default key {7fc5773e-c3fa--b57f-aee522ecc0c2} was loaded during application startup.
info: Walt.TestMcroServoces.Webapi.Startup[]
infomation
dbug: Microsoft.AspNetCore.Mvc.MvcJsonOptions[]
Compatibility switch AllowInputFormatterExceptionMessages in type MvcJsonOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
Compatibility switch AllowCombiningAuthorizeFilters in type MvcOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
Compatibility switch AllowBindingHeaderValuesToNonStringModelTypes in type MvcOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
Compatibility switch AllowValidatingTopLevelNodes in type MvcOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
Compatibility switch InputFormatterExceptionPolicy in type MvcOptions is using compatibility value MalformedInputExceptions for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
Compatibility switch SuppressBindingUndefinedValueToEnumType in type MvcOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions[]
Compatibility switch AllowAreas in type RazorPagesOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions[]
Compatibility switch AllowMappingHeadRequestsToGetHandler in type RazorPagesOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.MvcViewOptions[]
Compatibility switch SuppressTempDataAttributePrefix in type MvcViewOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory[]
Registered model binder providers, in the following order: Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinderProvider

linux下docker运行效果:debug和 console

testtesttest
dbug: Microsoft.AspNetCore.Hosting.Internal.WebHost[]
Hosting starting
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
User profile is available. Using '/root/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver[]
Repository contains no viable default key. Caller should generate a key with immediate activation.
dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[]
Policy resolution states that a new key should be added to the key ring.
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
Creating key {0fe5f8aa---83aa-59df0ed4f0c8} with creation date -- ::09Z, activation date -- ::09Z, and expiration date -- ::09Z.
dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
Descriptor deserializer type for key {0fe5f8aa---83aa-59df0ed4f0c8} is 'Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
No key escrow sink found. Not writing key {0fe5f8aa---83aa-59df0ed4f0c8} to escrow.
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
No XML encryptor configured. Key {0fe5f8aa---83aa-59df0ed4f0c8} may be persisted to storage in unencrypted form.
info: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[]
Writing data to file '/root/.aspnet/DataProtection-Keys/key-0fe5f8aa-0875-4612-83aa-59df0ed4f0c8.xml'.
dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
Key cache expiration token triggered by 'CreateNewKey' operation.
dbug: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[]
Reading data from file '/root/.aspnet/DataProtection-Keys/key-0fe5f8aa-0875-4612-83aa-59df0ed4f0c8.xml'.
dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
Found key {0fe5f8aa---83aa-59df0ed4f0c8}.
dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver[]
Considering key {0fe5f8aa---83aa-59df0ed4f0c8} with expiration date -- ::09Z as default key.
dbug: Microsoft.AspNetCore.DataProtection.TypeForwardingActivator[]
Forwarded activator type request from Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 to Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Culture=neutral, PublicKeyToken=adb9793829ddae60
dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ManagedAuthenticatedEncryptorFactory[]
Using managed symmetric algorithm 'System.Security.Cryptography.Aes'.
dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ManagedAuthenticatedEncryptorFactory[]
Using managed keyed hash algorithm 'System.Security.Cryptography.HMACSHA256'.
dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[]
Using key {0fe5f8aa---83aa-59df0ed4f0c8} as the default key.
dbug: Microsoft.AspNetCore.DataProtection.Internal.DataProtectionStartupFilter[]
Key ring with default key {0fe5f8aa---83aa-59df0ed4f0c8} was loaded during application startup.
info: Walt.TestMcroServoces.Webapi.Startup[]
infomation
dbug: Microsoft.AspNetCore.Mvc.MvcJsonOptions[]
Compatibility switch AllowInputFormatterExceptionMessages in type MvcJsonOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
Compatibility switch AllowCombiningAuthorizeFilters in type MvcOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
Compatibility switch AllowBindingHeaderValuesToNonStringModelTypes in type MvcOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
Compatibility switch AllowValidatingTopLevelNodes in type MvcOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
Compatibility switch InputFormatterExceptionPolicy in type MvcOptions is using compatibility value MalformedInputExceptions for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
Compatibility switch SuppressBindingUndefinedValueToEnumType in type MvcOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions[]
Compatibility switch AllowAreas in type RazorPagesOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions[]
Compatibility switch AllowMappingHeadRequestsToGetHandler in type RazorPagesOptions is using compatibility value True for version Version_2_1
dbug: Microsoft.AspNetCore.Mvc.MvcViewOptions[]
Compatibility switch SuppressTempDataAttributePref

总结:asp.net core中集成了很多以前.net的日志和调试功能,有点混乱,linux目前能用的提供程序有console和debug,EventSource和事件查看器还有Trace只能在windows专用。上面日志有一些区别,所以加debug提供程序,在相同分类和都具有console提供程序下debug会多出一些信息,所以并不是每个提供程序都共享所有日志信息,根据提供程序不同,会有多余的一些日志信息被加进来。但是如上图所示,并不影响,因为仅仅是一些系统级别的debug提供程序会多出一些信息,mvc模块给出的信息完全一致。

最新文章

  1. 一些用过的我常忘记的小知识(web前端)
  2. 华为手机连不上adb解决方法
  3. printf的一个常用技巧
  4. 前端性能优化工具--DOM Monster
  5. 转:简单介绍 P3P 技术
  6. C#关键字列表
  7. Android开发技巧——大图裁剪
  8. Xshell访问和连接Linux
  9. ArcGIS——2015年安徽各市GDP总量分级图(3等级)
  10. 那什么时候会触发BFC呢?块级格式化上下文
  11. Neural Network Programming - Deep Learning with PyTorch - YouTube
  12. HanLP 自然语言处理 for nodejs
  13. 一次掌握 React 与 React Native 两个框架
  14. zabbix学习
  15. Vue项目实践中的功能实现与要点
  16. inux 驱动程序开发中输入子系统总共能产生哪些事件类型(EV_KEY,EV_ABS,EV_REL)
  17. 修改app工程名 Android Studio
  18. MySQL谨慎使用&quot;replace into&quot;
  19. SQL Server 调优系列进阶篇 - 如何重建数据库索引
  20. Webapi上传数据(XML)敏感字符解决方案

热门文章

  1. 编译android源码m、mm、mmm命令的使用
  2. 解决Ubuntun 12.04编译Mesa10.3 WARNING: &#39;aclocal-1.14&#39; is missing on your system
  3. 常用模块----time&amp;random&amp;hushlib&amp;os
  4. Python编程-异常处理
  5. HTTP协议—常见的HTTP响应状态码解析
  6. mybatis 一对多和多对一
  7. 从Shell眼中看世界【TLCL】
  8. MapReduce-文本输入
  9. Phoenix表和索引分区数对插入和查询性能的影响
  10. CreateThread创建线程传递结构体参数