最近在写一个分布式缓存的框架性基础性组件,和以往做个网站,写个程序不同的是,如果写得不好,可能对全局都会有影响,因此在写这种程序代码时,你会有一种压力。
比如:万一在生产环境用这个组件出了问题怎么办?是否能够迅速定位到错误的地方,找出原因修正?
原先我写程序都是象征性的用一下log4net,common-logging之类的输出日志:
private static ILog logger = LogManager.GetLogger(typeof (LocalcacheBackend));
logger.Info(m=>m("由于没有收到任何set消息,因此这里不触发CacheItemSetedReceived事件"));
可是在生产环境这种海量利复杂的环境下,你就会担心一个是日志量巨大,出了问题不好排查,一般都只记录到Error级别,记录到这个级别的日志,是否足以让你找到错误,多久你能分析出错误,并修复它。
我思考的问题是log4net之类只的日志记录组件,提供给我们了记录日志的方案,仅是一个工具,但是具体在实际中如何设计一个有层次能够及时在复杂生产环境中,快速找到问题,还需要一定的方法和理论的知识,这些知识一般的书本上都没有告诉你,需要你在实际中去摸索和总结。
另外我也发现,log4net等提供的记录RollingLogFileAppender并不是非常实现,一般只用来做为事后备查的手段,在开发的过程中使用UdpAppender更为实时有效,这里有篇文章大家可以参考
CodeProject: A log4net Realtime Color Console for ASP.NET. Free source code and programming help
但在实际生产环境中我还没有找到一个比较好的组合方案,但是下面几个appender是我觉得在生产环境中值得应用推荐的
Product env:
RollingFileAppender
SmtpAppender/SmtpPickupDirAppender
TraceAppender
EventLogAppender
Dev env:
EventLogAppender
RollingFileAppender
UdpAppender
OutputDebugStringAppender
ColoredConsoleAppender
具体还是得根据实际的场景去量体裁衣,熟读log4net的配置文档,
Apache log4net - Apache log4net: Config Examples
另外一个发现是log4net已经对.net内建的System.Diagnostiscs命名空间下的Debug和Trace功能提供了支持,原先我还在想如何整合这一块的内容进去呢
System.Diagnostics命名空间里的Debug类和Trace类的用途 - 破浪 - 博客园
浅谈C#中的Trace和Debug类【转】 - 从绝望中寻找希望,人生终将辉煌! - 博客园
在做日志分析时需要有好的图形界面工具,特别是对于多线程程序就更加依赖这种工具如:
logParser
TraceTool 8: The Swiss-Army knife of trace - The Code Project - C# Programming
我在此也只是罗列一下,我并没有找到特别合适的工具,由于工作任务繁重,也就先告一段落,以后有机会再捡起来继续深究一下。在此小记一下,以便回忆。