• asp.net core mcroservices 架构之 分布式日志(一)


       一 简介                                                                                                    

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

         必须有收集,索引,分析查询的功能。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[0]
          服务配置完成
    dbug: Microsoft.AspNetCore.Hosting.Internal.WebHost[3]
          Hosting starting
    info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
          User profile is available. Using 'C:UsersAdministratorAppDataLocalASP.NETDataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
    dbug: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[37]
          Reading data from file 'C:UsersAdministratorAppDataLocalASP.NETDataProtection-Keyskey-7fc5773e-c3fa-4523-b57f-aee522ecc0c2.xml'.
    dbug: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[37]
          Reading data from file 'C:UsersAdministratorAppDataLocalASP.NETDataProtection-Keyskey-b6c77378-6ca9-4d96-a5e2-f5952a8c2a6f.xml'.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[18]
          Found key {7fc5773e-c3fa-4523-b57f-aee522ecc0c2}.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[18]
          Found key {b6c77378-6ca9-4d96-a5e2-f5952a8c2a6f}.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver[13]
          Considering key {7fc5773e-c3fa-4523-b57f-aee522ecc0c2} with expiration date 2019-03-03 07:56:30Z as default key.
    dbug: Microsoft.AspNetCore.DataProtection.TypeForwardingActivator[0]
          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[51]
          Decrypting secret element using Windows DPAPI.
    dbug: Microsoft.AspNetCore.DataProtection.TypeForwardingActivator[0]
          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[4]
          Opening CNG algorithm 'AES' from provider '(null)' with chaining mode CBC.
    dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.CngCbcAuthenticatedEncryptorFactory[3]
          Opening CNG algorithm 'SHA256' from provider '(null)' with HMAC.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[2]
          Using key {7fc5773e-c3fa-4523-b57f-aee522ecc0c2} as the default key.
    dbug: Microsoft.AspNetCore.DataProtection.Internal.DataProtectionStartupFilter[0]
          Key ring with default key {7fc5773e-c3fa-4523-b57f-aee522ecc0c2} was loaded during application startup.
    info: Walt.TestMcroServoces.Webapi.Startup[0]
          infomation
    dbug: Microsoft.AspNetCore.Mvc.MvcJsonOptions[0]
          Compatibility switch AllowInputFormatterExceptionMessages in type MvcJsonOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.MvcOptions[0]
          Compatibility switch AllowCombiningAuthorizeFilters in type MvcOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.MvcOptions[0]
          Compatibility switch AllowBindingHeaderValuesToNonStringModelTypes in type MvcOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.MvcOptions[0]
          Compatibility switch AllowValidatingTopLevelNodes in type MvcOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.MvcOptions[0]
          Compatibility switch InputFormatterExceptionPolicy in type MvcOptions is using compatibility value MalformedInputExceptions for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.MvcOptions[0]
          Compatibility switch SuppressBindingUndefinedValueToEnumType in type MvcOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions[0]
          Compatibility switch AllowAreas in type RazorPagesOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions[0]
          Compatibility switch AllowMappingHeadRequestsToGetHandler in type RazorPagesOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.MvcViewOptions[0]
          Compatibility switch SuppressTempDataAttributePrefix in type MvcViewOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory[12]
          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[3]
          Hosting starting
    info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
          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[53]
          Repository contains no viable default key. Caller should generate a key with immediate activation.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[57]
          Policy resolution states that a new key should be added to the key ring.
    info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[58]
          Creating key {0fe5f8aa-0875-4612-83aa-59df0ed4f0c8} with creation date 2018-12-18 19:04:09Z, activation date 2018-12-18 19:04:09Z, and expiration date 2019-03-18 19:04:09Z.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[32]
          Descriptor deserializer type for key {0fe5f8aa-0875-4612-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[34]
          No key escrow sink found. Not writing key {0fe5f8aa-0875-4612-83aa-59df0ed4f0c8} to escrow.
    warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
          No XML encryptor configured. Key {0fe5f8aa-0875-4612-83aa-59df0ed4f0c8} may be persisted to storage in unencrypted form.
    info: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[39]
          Writing data to file '/root/.aspnet/DataProtection-Keys/key-0fe5f8aa-0875-4612-83aa-59df0ed4f0c8.xml'.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[23]
          Key cache expiration token triggered by 'CreateNewKey' operation.
    dbug: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[37]
          Reading data from file '/root/.aspnet/DataProtection-Keys/key-0fe5f8aa-0875-4612-83aa-59df0ed4f0c8.xml'.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[18]
          Found key {0fe5f8aa-0875-4612-83aa-59df0ed4f0c8}.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver[13]
          Considering key {0fe5f8aa-0875-4612-83aa-59df0ed4f0c8} with expiration date 2019-03-18 19:04:09Z as default key.
    dbug: Microsoft.AspNetCore.DataProtection.TypeForwardingActivator[0]
          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[11]
          Using managed symmetric algorithm 'System.Security.Cryptography.Aes'.
    dbug: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ManagedAuthenticatedEncryptorFactory[10]
          Using managed keyed hash algorithm 'System.Security.Cryptography.HMACSHA256'.
    dbug: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider[2]
          Using key {0fe5f8aa-0875-4612-83aa-59df0ed4f0c8} as the default key.
    dbug: Microsoft.AspNetCore.DataProtection.Internal.DataProtectionStartupFilter[0]
          Key ring with default key {0fe5f8aa-0875-4612-83aa-59df0ed4f0c8} was loaded during application startup.
    info: Walt.TestMcroServoces.Webapi.Startup[0]
          infomation
    dbug: Microsoft.AspNetCore.Mvc.MvcJsonOptions[0]
          Compatibility switch AllowInputFormatterExceptionMessages in type MvcJsonOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.MvcOptions[0]
          Compatibility switch AllowCombiningAuthorizeFilters in type MvcOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.MvcOptions[0]
          Compatibility switch AllowBindingHeaderValuesToNonStringModelTypes in type MvcOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.MvcOptions[0]
          Compatibility switch AllowValidatingTopLevelNodes in type MvcOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.MvcOptions[0]
          Compatibility switch InputFormatterExceptionPolicy in type MvcOptions is using compatibility value MalformedInputExceptions for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.MvcOptions[0]
          Compatibility switch SuppressBindingUndefinedValueToEnumType in type MvcOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions[0]
          Compatibility switch AllowAreas in type RazorPagesOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions[0]
          Compatibility switch AllowMappingHeadRequestsToGetHandler in type RazorPagesOptions is using compatibility value True for version Version_2_1
    dbug: Microsoft.AspNetCore.Mvc.MvcViewOptions[0]
          Compatibility switch SuppressTempDataAttributePref

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

     

  • 相关阅读:
    第6章 对列表应用样式和创建导航条
    第3章 可视化格式模型
    第2章 为样式找到应用目标
    精通CSS 第1章
    JavaScript作用域学习笔记
    getByClass()
    判断各种数据类型
    值类型和引用类型的区别
    [原]Docker部署SuperMap8.1.1
    Docker初步
  • 原文地址:https://www.cnblogs.com/ck0074451665/p/10146838.html
Copyright © 2020-2023  润新知