关于日志记录,如果你不想随用随写,又不想用log4net的话,也许你可以了解一下这个!
我也是个很懒的人,程序上的东西,只要别人写好了,而且自己用着爽,绝不做重复的coding。这个组件的起源是因为感觉log4net太强大太复杂(对我来说真是这样),当我想用log4net的时候,看到配置我都吓尿n次了,而这个时候心中又突发奇想,用HTML来做日志的表现!理由有二,一是HTML和CSS大家都会,二是可以实现很好的可读可视性。
一、配置文件说明
class="code_img_closed" src="/Upload/Images/2014052418/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('921119d2-f235-4a43-aac9-e964ff73e848',event)" src="/Upload/Images/2014052418/2B1B950FA3DF188F.gif" alt="" /><?xml version="1.0" encoding="utf-8" ?> <LoggerConfig> <style> .fatal{ background-color:red } .error{ background-color:purple; } .warn{ background-color:yellow; } .info{ background-color:green; } .debug{ background-color:gray; } .myinfo{ font-size:24px; } </style> <tpls> <tpl name="fatal"> <![CDATA[ <p> <span class="fatal">{type}</span>:{message}<br/> {date} </p> ]]> </tpl> <tpl name="error" > <![CDATA[ <p> <span class="error">{type}</span>:{message}<br/> {date} </p> ]]> </tpl> <tpl name="warn"> <![CDATA[ <p> <span class="warn">{type}</span>:{message}<br/> {date} </p> ]]> </tpl> <tpl name="info"> <![CDATA[ <p> <span class="info">{type}</span>:{message}<br/> {date} </p> ]]> </tpl> <tpl name="debug"> <![CDATA[ <p> <span class="debug">{type}</span>:{message}<br/> {date} </p> ]]> </tpl> </tpls> <logs> <log name="default" path="D:\abc" types="all" dateFmt="yyyy-MM-dd HH:mm:ss"> <tpl name="info"> <![CDATA[ <p> <span class="info myinfo">{type}</span>:{message}<br/> {date} </p> ]]> </tpl> </log> <log name="log2" path="D:\abc\a.html" types="fatal,error,warn,info,debug"> </log> </logs> </LoggerConfig>LoggerConfig.xml
虽然上面的配置也不短,洒洒洋洋80大行,但它真的只有3个(或者说2个半)很简单的结点组成。
1、style结点,这个不说了,和html页面里style结点是一个样的,用于定义下面模板tpl里的样式。
2、tpls结点,这里定义的是日志类型的默认模板,模板内容大家都懂,就是HTML标签,其中有三个占位符{type}、{message}、{date},日志类型和{type}是指一类东西,分别是fatal,error,warn,info,debug五个类型,这一点是参考log4net,那里它叫日志级别。
3、logs结点,里面每个子结点即log结点都定义一个logger对象的属性和行为。
先看log结点的属性:
1)name为唯一表识,用来得到唯一logger对象(内部有缓存机制,随用随调,无须担心),name="default"表示默认logger
2)path为目录或具体文件,为目录时日志文件会根据日期生成, 如上“D:\abc” 会随着日期生成多个这个命名的文件(D:\abc\yyyy\MM\dd.html),当为具体文件时,应该是.html或.htm的文件,日志便会一直追加这一个文件。
3)types就是上面说过的5个类型,为空表示什么都不记录,多个type时用英文逗号隔开,如只记录致命错误和警告,就是types="fatal,warn",如果要全部记录,可用types="all"来简单表示types="fatal,error,warn,info,debug"。
4)dateFmt这个是模板里{date}的格式,默认是"yyyy-MM-dd HH:mm:ss",记录日志时将做为DateTime.ToString()的参数调用。
log结点的子结点:
和上面tpls的子结点一样,都是定义模板用的,上面是默认的,这里自然是特殊、可选的了,大家应该能想到这里的定义会覆盖默认的,而其实上也的确如此~_~!因为是重复的内容,所以上面才说配置文件一共就2个半结点组成。
二、调用API
把组件dll引入项目后,要在App.config和web.config里设置Logger配置文件的路径,如:
<appSettings> <add key="loggerConfig" value="LoggerConfig.xml"/> </appSettings>
1、得到Logger对象
//得到默认logger,即name="default"的那个 var logger = Logger.GetInstance(); //得到name="log2"的对象 var log2 = Logger.GetInstance("log2");
2、简单记录日志
logger.Debug("debugdebugdebug"); logger.Info("infoinfoinfoinfoinfoinfo");
3、过虑记录日志,由于日志的内容很可能是动态的,所以组件提供的所有记录日志的方法都可传入一个委托来过虑掉那些自己不关心的内容
//这个不会记录,开始为数字的被过滤掉了 logger.Error("2323ErrorErrorErrorError", (s) =>Regex.IsMatch(s,@"^\d+")); //这个会记录,日志的内容在于10,不会被过滤 logger.Fatal("FatalFatalFatalFatal", (s) => s.Length < 10);
4、HTML展示,开始一直都说用HTML表示,效果是什么样呢?(此处的不美,不表示不支持优美的布局,程序员的界面,你们懂的!)
以此献给那些喜欢简单编程的程序员们!下载