Skip to main content
 首页 » 编程设计

关于程序日志的设计思考,及写程序时候的心态2009-12-16

2022年07月19日26findumars

最近在写一个分布式缓存的框架性基础性组件,和以往做个网站,写个程序不同的是,如果写得不好,可能对全局都会有影响,因此在写这种程序代码时,你会有一种压力。

比如:万一在生产环境用这个组件出了问题怎么办?是否能够迅速定位到错误的地方,找出原因修正?

原先我写程序都是象征性的用一下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#中的跟踪2 - Diwore - 博客园

浅谈C#中的Trace和Debug类【转】 - 从绝望中寻找希望,人生终将辉煌! - 博客园

在做日志分析时需要有好的图形界面工具,特别是对于多线程程序就更加依赖这种工具如:

logParser

TraceTool 8: The Swiss-Army knife of trace - The Code Project - C# Programming

我在此也只是罗列一下,我并没有找到特别合适的工具,由于工作任务繁重,也就先告一段落,以后有机会再捡起来继续深究一下。在此小记一下,以便回忆。


本文参考链接:https://www.cnblogs.com/lexus/archive/2009/12/16/1625312.html