一 简介

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

必须有收集,索引,分析查询的功能。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事件是可以用的。

  1. var host = new WebHostBuilder().ConfigureAppConfiguration((webHostBuild,configBuild) =>
  2. {
  3. var env = webHostBuild.HostingEnvironment;
  4.  
  5. configBuild.AddJsonFile("appsettings.json")
  6. .AddJsonFile($"appsettings.{env.EnvironmentName}.json"
  7. ,optional:true,reloadOnChange:true)
  8. .SetBasePath(Directory.GetCurrentDirectory());
  9. }).ConfigureLogging((hostingContext, logging) => {
  10. logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"))
  11. .AddConsole()
  12. .AddDebug()
  13. .AddEventSourceLogger();
  14. }).UseKestrel()
  15. .UseStartup<Startup>();
  16. host.Start();
  17. Console.ReadKey();
  1. {
  2. "Logging": {
  3. "LogLevel": {
  4. "Default": "Debug",
  5. "System": "Information",
  6. "Microsoft": "Information"
  7. }
  8. }
  9. }

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

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

  1. {
  2. "Logging": {
  3. "LogLevel": {
  4. "Default": "Debug",
  5. "System": "Information",
  6. "Microsoft": "Information"
  7. }
  8. }
  9. }

windows运行效果:只给加console

  1. testtesttest
  2. dbug: Walt.TestMcroServoces.Webapi.Startup[]
  3. 服务配置完成
  4. dbug: Microsoft.AspNetCore.Hosting.Internal.WebHost[]
  5. Hosting starting
  6. info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
  7. 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.
  8. dbug: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[]
  9. Reading data from file 'C:\Users\Administrator\AppData\Local\ASP.NET\DataProtection-Keys\key-7fc5773e-c3fa-4523-b57f-aee522ecc0c2.xml'.
  10. dbug: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[]
  11. Reading data from file 'C:\Users\Administrator\AppData\Local\ASP.NET\DataProtection-Keys\key-b6c77378-6ca9-4d96-a5e2-f5952a8c2a6f.xml'.
  12. dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
  13. Found key {7fc5773e-c3fa--b57f-aee522ecc0c2}.
  14. dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
  15. Found key {b6c77378-6ca9-4d96-a5e2-f5952a8c2a6f}.
  16. dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver[]
  17. Considering key {7fc5773e-c3fa--b57f-aee522ecc0c2} with expiration date -- ::30Z as default key.
  18. dbug: Microsoft.AspNetCore.DataProtection.TypeForwardingActivator[]
  19. 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
  20. dbug: Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiXmlDecryptor[]
  21. Decrypting secret element using Windows DPAPI.
  22. dbug: Microsoft.AspNetCore.DataProtection.TypeForwardingActivator[]
  23. 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
  24. dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.CngCbcAuthenticatedEncryptorFactory[]
  25. Opening CNG algorithm 'AES' from provider '(null)' with chaining mode CBC.
  26. dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.CngCbcAuthenticatedEncryptorFactory[]
  27. Opening CNG algorithm 'SHA256' from provider '(null)' with HMAC.
  28. dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[]
  29. Using key {7fc5773e-c3fa--b57f-aee522ecc0c2} as the default key.
  30. dbug: Microsoft.AspNetCore.DataProtection.Internal.DataProtectionStartupFilter[]
  31. Key ring with default key {7fc5773e-c3fa--b57f-aee522ecc0c2} was loaded during application startup.
  32. info: Walt.TestMcroServoces.Webapi.Startup[]
  33. infomation
  34. dbug: Microsoft.AspNetCore.Mvc.MvcJsonOptions[]
  35. Compatibility switch AllowInputFormatterExceptionMessages in type MvcJsonOptions is using compatibility value True for version Version_2_1
  36. dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
  37. Compatibility switch AllowCombiningAuthorizeFilters in type MvcOptions is using compatibility value True for version Version_2_1
  38. dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
  39. Compatibility switch AllowBindingHeaderValuesToNonStringModelTypes in type MvcOptions is using compatibility value True for version Version_2_1
  40. dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
  41. Compatibility switch AllowValidatingTopLevelNodes in type MvcOptions is using compatibility value True for version Version_2_1
  42. dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
  43. Compatibility switch InputFormatterExceptionPolicy in type MvcOptions is using compatibility value MalformedInputExceptions for version Version_2_1
  44. dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
  45. Compatibility switch SuppressBindingUndefinedValueToEnumType in type MvcOptions is using compatibility value True for version Version_2_1
  46. dbug: Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions[]
  47. Compatibility switch AllowAreas in type RazorPagesOptions is using compatibility value True for version Version_2_1
  48. dbug: Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions[]
  49. Compatibility switch AllowMappingHeadRequestsToGetHandler in type RazorPagesOptions is using compatibility value True for version Version_2_1
  50. dbug: Microsoft.AspNetCore.Mvc.MvcViewOptions[]
  51. Compatibility switch SuppressTempDataAttributePrefix in type MvcViewOptions is using compatibility value True for version Version_2_1
  52. dbug: Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory[]
  53. Registered model binder providers, in the following order: Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinderProvider

linux下docker运行效果:debug和 console

  1. testtesttest
  2. dbug: Microsoft.AspNetCore.Hosting.Internal.WebHost[]
  3. Hosting starting
  4. info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
  5. User profile is available. Using '/root/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
  6. dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver[]
  7. Repository contains no viable default key. Caller should generate a key with immediate activation.
  8. dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[]
  9. Policy resolution states that a new key should be added to the key ring.
  10. info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
  11. Creating key {0fe5f8aa---83aa-59df0ed4f0c8} with creation date -- ::09Z, activation date -- ::09Z, and expiration date -- ::09Z.
  12. dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
  13. 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'.
  14. dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
  15. No key escrow sink found. Not writing key {0fe5f8aa---83aa-59df0ed4f0c8} to escrow.
  16. warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
  17. No XML encryptor configured. Key {0fe5f8aa---83aa-59df0ed4f0c8} may be persisted to storage in unencrypted form.
  18. info: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[]
  19. Writing data to file '/root/.aspnet/DataProtection-Keys/key-0fe5f8aa-0875-4612-83aa-59df0ed4f0c8.xml'.
  20. dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
  21. Key cache expiration token triggered by 'CreateNewKey' operation.
  22. dbug: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[]
  23. Reading data from file '/root/.aspnet/DataProtection-Keys/key-0fe5f8aa-0875-4612-83aa-59df0ed4f0c8.xml'.
  24. dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[]
  25. Found key {0fe5f8aa---83aa-59df0ed4f0c8}.
  26. dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver[]
  27. Considering key {0fe5f8aa---83aa-59df0ed4f0c8} with expiration date -- ::09Z as default key.
  28. dbug: Microsoft.AspNetCore.DataProtection.TypeForwardingActivator[]
  29. 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
  30. dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ManagedAuthenticatedEncryptorFactory[]
  31. Using managed symmetric algorithm 'System.Security.Cryptography.Aes'.
  32. dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ManagedAuthenticatedEncryptorFactory[]
  33. Using managed keyed hash algorithm 'System.Security.Cryptography.HMACSHA256'.
  34. dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[]
  35. Using key {0fe5f8aa---83aa-59df0ed4f0c8} as the default key.
  36. dbug: Microsoft.AspNetCore.DataProtection.Internal.DataProtectionStartupFilter[]
  37. Key ring with default key {0fe5f8aa---83aa-59df0ed4f0c8} was loaded during application startup.
  38. info: Walt.TestMcroServoces.Webapi.Startup[]
  39. infomation
  40. dbug: Microsoft.AspNetCore.Mvc.MvcJsonOptions[]
  41. Compatibility switch AllowInputFormatterExceptionMessages in type MvcJsonOptions is using compatibility value True for version Version_2_1
  42. dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
  43. Compatibility switch AllowCombiningAuthorizeFilters in type MvcOptions is using compatibility value True for version Version_2_1
  44. dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
  45. Compatibility switch AllowBindingHeaderValuesToNonStringModelTypes in type MvcOptions is using compatibility value True for version Version_2_1
  46. dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
  47. Compatibility switch AllowValidatingTopLevelNodes in type MvcOptions is using compatibility value True for version Version_2_1
  48. dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
  49. Compatibility switch InputFormatterExceptionPolicy in type MvcOptions is using compatibility value MalformedInputExceptions for version Version_2_1
  50. dbug: Microsoft.AspNetCore.Mvc.MvcOptions[]
  51. Compatibility switch SuppressBindingUndefinedValueToEnumType in type MvcOptions is using compatibility value True for version Version_2_1
  52. dbug: Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions[]
  53. Compatibility switch AllowAreas in type RazorPagesOptions is using compatibility value True for version Version_2_1
  54. dbug: Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions[]
  55. Compatibility switch AllowMappingHeadRequestsToGetHandler in type RazorPagesOptions is using compatibility value True for version Version_2_1
  56. dbug: Microsoft.AspNetCore.Mvc.MvcViewOptions[]
  57. Compatibility switch SuppressTempDataAttributePref

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

asp.net core mcroservices 架构之 分布式日志(一)的更多相关文章

  1. asp.net core mcroservices 架构之 分布式日志(三):集成kafka

    一 kafka介绍 kafka是基于zookeeper的一个分布式流平台,既然是流,那么大家都能猜到它的存储结构基本上就是线性的了.硬盘大家都知道读写非常的慢,那是因为在随机情况下,线性下,硬盘的读写 ...

  2. asp.net core mcroservices 架构之 分布式日志(二)之自定义日志开发

    netcore日志原理 netcore的日志是作为一个扩展库存在的,每个组件都有它的入口,那么作为研究这个组件的入口是最好的,首先看两种方式: 这个是源码例子提供的. var loggingConfi ...

  3. asp.net core microservices 架构之分布式自动计算(三)-kafka日志同步至elasticsearch和kibana展示

    一 kafka consumer准备 前面的章节进行了分布式job的自动计算的概念讲解以及实践.上次分布式日志说过日志写进kafka,是需要进行处理,以便合理的进行展示,分布式日志的量和我们对日志的重 ...

  4. asp.net core microservices 架构之 分布式自动计算(二)

    一  简介                   上一篇介绍了zookeeper如何进行分布式协调,这次主要讲解quartz使用zookeeper进行分布式计算,因为上一篇只是讲解原理,而这次实际使用, ...

  5. asp.net core microservices 架构之 分布式自动计算(一)

       一:简介   自动计算都是常驻内存的,没有人机交互.我们经常用到的就是console job和sql job了.sqljob有自己的宿主,与数据库产品有很关联,暂时不提.console job使 ...

  6. .net core microservices 架构之 分布式

    .net core microservices 架构之 分布式  一:简介   自动计算都是常驻内存的,没有人机交互.我们经常用到的就是console job和sql job了.sqljob有自己的宿 ...

  7. ASP.NET Core使用Elasticsearch记录NLog日志

    ASP.NET Core使用Elasticsearch记录NLog日志 1.新建一个 ASP.NET Core项目 2.安装Nuge包 运行:Install-Package NLog.Web.AspN ...

  8. ASP.NET Core 使用 Redis 实现分布式缓存:Docker、IDistributedCache、StackExchangeRedis

    ASP.NET Core 使用 Redis 实现分布式缓存:Docker.IDistributedCache.StackExchangeRedis 前提:一台 Linux 服务器.已安装 Docker ...

  9. asp.net core microservices 架构之eureka服务发现

    一 简介 微服务将需多的功能拆分为许多的轻量级的子应用,这些子应用相互调度.好处就是轻量级,完全符合了敏捷开发的精神.我们知道ut(单元测试),不仅仅提高我们的程序的健壮性,而且可以强制将类和方法的设 ...

随机推荐

  1. js文件操作

    IE下 1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码代码如下: Var fso=new ActiveXObject(Scripting.FileSys ...

  2. python3 multiprocessing 模块

    多进程 Multiprocessing 模块 multiprocessing 模块官方说明文档 Process 类 Process 类用来描述一个进程对象.创建子进程的时候,只需要传入一个执行函数和函 ...

  3. php的异常和处理

    常见错误处理类型 语法错误 环境错误 逻辑错误 常见错误级别 Deprecated 最低级别的错误 不推荐,不建议,使用一些过期函数的时候会出现,程序继续执行 Notice 通知级别的错误 使用一些未 ...

  4. FarBox的使用经历

    新年伊始,一个崭新的开始,我的博客也有个新的起点.怎么会有这个想法呢?个人觉得这是程序员那颗不安分的心开始躁动了(其实就是开始作了~~哈哈,开个玩笑). 更佳界面.更流畅的操作.更方便的查看.更炫酷动 ...

  5. UI控件之UITableView的协议方法

    <UITableViewDataSource,UITableViewDelegate> //设置表视图的编辑状态 -(void)setEditing:(BOOL)editing anima ...

  6. 黑色CSS3立体动画菜单

    在线演示 本地下载

  7. 20145240《Java程序设计》第三周学习总结

    20145240 <Java程序设计>第三周学习总结 教材学习内容总结 个人感觉第三周的学习量还是很大的,需要学习的内容更难了而且量也变多了,所以投入了更多的时间到Java的学习中去. 第 ...

  8. 12.常见模块time、json模块

    1.time模块 import time #python中最基本的时间模块 time.time() #时间戳 (1970年1月1日00:00:00后经过的浮点秒数) time.localtime(ti ...

  9. INSPIRED启示录 读书笔记 - 第24章 平滑部署

    避免更新产品导致用户反感 毫无征兆地更新不必要的版本会令用户产生反感.不是所有用户都喜欢新版本的产品.用户产生反感主要有几个原因 1.事前没有收到更新通知,用户觉得措手不及 2.用户没时间学习.适应新 ...

  10. docker calico安装

      第一步,安装etcd: 请参考以前的文章:  http://www.cnblogs.com/vincenshen/articles/8637949.html 第二步,下载calico: sudo ...