使用RfileLogger在真机上通过Log进行事件跟踪
From Forum Nokia Wiki
适用版本
S60 2nd Edition , S60 3rd Edition
我们经常会碰到这样的情况:程序在模拟器上运行的很好,但是到手机上运行却出现莫名其妙的错误,程序留下一个“系统错误”就退出了,虽然我们可以通过返回的错误码知道大概的错误类型,但是要通过错误码来推测确切的错误所在似乎非常困难,如果能通过log文件把程序运行的路径记录下来,对我们定位错误会有非常大的帮助,对此symbian为我们提供了RfileLogger类实现这个功能。如前所讲,RfileLogger类就是用于实现在需要的时候提供事件记录的工具,如其名字所示,RfileLogger是一个资源类,使用之前必须要连接服务器,然后必须创建一个用于记录事件的文件,该函数为CreateLog,含有3个参数,第一个参数是用于指定存放log文件的文件夹名(相对于C:/Logs路径),第二个参数是log文件名,第三个参数指定了对log文件操作的方式(EFileLoggingModeOverwrite 是覆盖方式, EfileLoggingModeAppend是追加方式),下面是初始化RfileLogger的一个实例:
RFileLogger iLog; iLog.Connect(); //连接服务器 iLog.CreateLog(_L("LogDirectory"),_L("LogFile"),EFileLoggingModeOverwrite); //创建log文件
注意:文件夹路径是相对C:/Logs的,并且最后不需要加’/’结束符,因此以上例子中的存放log文件的完整路径为C:/Logs/LogDirectory,另外不要忘了在你的mmp文件中包含必须的flogger.lib库,同时flogger.h头文件也是必需的。使用完以后我们要关闭log文件以及RfileLogger实例与服务器的连接:
iLog.CloseLog(); //关闭log文件 iLog.Close(); //关闭连接
通常可以把初始化代码放在需要跟踪类的ConstructL()里,把关闭log的代码放在该类的析构函数中。创建RfileLogger实例以后,就可以使用log函数对指定的log文件进行log输出了,输出函数有以下3种:
Log函数 log文件中的输出 iLog.Write(_L("MyLog")) 11/07/2003 4:00:13 MyLog iLog.WriteFormat(_L("Number=%d"),number) 11/07/2003 4:00:13 Number=0 iLog.HexDump(aHeader,aHeader,myPtr,4) 11/07/2003 4:00:13 myBuf:0000: 41 42 00 44 AB.D
同时你可以通过SetDateAndTime函数设置是否需要输出时间和数据,该函数原型为:
void SetDateAndTime(TBool aUseDate, TBool aUseTime).
最后提醒一点,C:/Logs路径并不是系统自动创建的,如果你需要进行log输出,必须手动创建存放log文件的完整路径,在以上的例子中为C:/Logs/LogDirectory,然后运行程序就可以生成相应的log文件了,如果你不需要进行log跟踪了,只要删除这个文件夹就可以了。
best regards
davey_2