一 简介                                                                                                                                                        

             无论是微服务还是其他任何分布式系统,都需要一个统一处理日志的系统,这个系统必须有收集,索引,分析查询的功能。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:这个级别开发一般不会用,是组件或者平台提供商为调试错误用的【windows专用】,因为可以看到组件内部运行状况,而且会有很大安全隐患,所以不建议在生产开启这个功能,比如mysql lib库的trace可以打印出数据库连接字符串的。

                                                     

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

                                             控制台:这个不用说了。

                                             调试:就是debug,在 Linux 中,此提供程序将日志写入 /var/log/message。在windows中就是经典的System.Diagnostics.Debug功能,这是.net提供的调试功能,非常详细,在开发中非常有用。下面是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"
    }
  }
}

运行效果:

asp.net core mcroservices 机构之 分布式日志(一)-LMLPHP

打印出来的框起来的都是EventSource的事件,我自定义的就是那些汉字部分,而debug的没有打印出来,因为debug使用net的trace日志系统,需要去配置Trace,而且只支持windows环境。

            总结:asp.net core中集成了很多以前.net的功能,虽然部分可以用上,部分用不上,比如debug模式,vs开发一直再用。而trace和debug技术体系一致,但是trace只能在.net freamwork平台上跑.一切应该都是为了兼容开发平台和运行环境吧。下一章我们一起来看看自定义日志提供以及与kafka的集成           

 

12-20 07:44