asp.net core mcroservices 机构之 分布式日志(一)
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:这个级别开发一般不会用,是组件或者平台提供商为调试错误用的【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" } } }
运行效果:
打印出来的框起来的都是EventSource的事件,我自定义的就是那些汉字部分,而debug的没有打印出来,因为debug使用net的trace日志系统,需要去配置Trace,而且只支持windows环境。
总结:asp.net core中集成了很多以前.net的功能,虽然部分可以用上,部分用不上,比如debug模式,vs开发一直再用。而trace和debug技术体系一致,但是trace只能在.net freamwork平台上跑.一切应该都是为了兼容开发平台和运行环境吧。下一章我们一起来看看自定义日志提供以及与kafka的集成