在写软件中,如果有完整的日志输出,开发者在跟踪问题上就会变得很方便,而且现场问题很多是不会让你直接调试跟踪的,这个时候查询日志恐怕是唯一的手段.日志一般可以分为错误日志,运行状态日志,交互日志(通信日志).其实交互日志也可以看作运行状态日志的一种.编写输出日志的代码往往占用了程序员大量的时间,通常来说日志输出代码会占总代码的1%到3%左右(个人经验,当然有些牛人的程序是不需要日志的).
在SysLog中对日志有严格的程度分级,一共有7级(emergency,alert,critical,error,warning,notice,info,debug),参考SysLog的程度分级,你也可以规划你的日志分级.
日志的呈现也有多种:日志文件,界面呈现,windows事件输出,写数据库.
考虑这些种种因素,编写组织一个好的日志类或架构并不容易.
今天我公布我的几个日志类,以供大家参考:
该文件提供了CFileLogger文件输出,CListViewLogger界面输出(ListView显示),CLogMgr(提供单一示例,同时文件输出和界面输出)
初始化:
CLogMgr.G_Instance.AppOutputLevel = MixFunc.LogSeverity.info;
CLogMgr.G_Instance.ErrorOutputLevel = MixFunc.LogSeverity.warning;
CLogMgr.G_Instance.AppLogView = lvApplog;
CLogMgr.G_Instance.ErrorLogView = lvError;
日志输出: 例1:
try
{
//你的代码
}
catch (Exception ex)
{
CLogMgr.G_Instance.WriteErrorLog(MixFunc.LogSeverity.error, "数据库连接设置", ex.Message + ":" + ex.StackTrace);
}
例2:
public void OnError(string ExtraMsg, Exception Ex)
{
CLogMgr.G_Instance.WriteErrorLog(LogSeverity.error, ExtraMsg, Ex);
}
例3:
CLogMgr.G_Instance.WriteAppLog(MixFunc.LogSeverity.info, "消息服务", "服务启动成功!");
日志显示:
//需要定时器,定时调用
private void tmRefresh_Tick(object sender, EventArgs e)
{
CLogMgr.G_Instance.DisplayUILog();
}
效果如图: