WEB开发网
开发学院手机开发Windows Mobile 开发 Windows Mobile 下使用 Native C++ 开发日志类 阅读

Windows Mobile 下使用 Native C++ 开发日志类

 2010-02-24 20:01:00 来源:WEB开发网   
核心提示:const&); // assign op. hidden ~Logger(); // dtor hidden上面的代码用于保证只有一个对象的实例化,很多做C#的开发人员会忽略上面的代码,Windows Mobile 下使用 Native C++ 开发日志类(3),因为C#没有深拷贝的概念,也没有运算符重载的概念,打印
const&); // assign op. hidden ~Logger(); // dtor hidden

上面的代码用于保证只有一个对象的实例化,很多做C#的开发人员会忽略上面的代码,因为C#没有深拷贝的概念,也没有运算符重载的概念。

Logger& Logger::Instance() { static Logger oLogger; return oLogger;}

上面的代码保证线程安全以及按需实例化。我觉得这个实现模式很好,同时满足三个愿望。

日志分级管理

打印日志的时候,分级管理很重要,不同时期需要显示不同级别的日志,开发时期,可能需要Trace级别的日志,到了运行时可能只需要Error以上级别的日志了,日志分级管理能均衡时间与空间的合理利用。

通过级别管理,打印级别高于需要显示级别的日志。

if( m_enLogLevel > enLogLevel){ return;}

在打印过程中,显示级别,我在找问题的时候都是从高级往低级找。

if( 0 > fwprintf(m_hLogFile, _T("%S THR:%8.8x %s %s "), GetCurrentTime(), GetCurrentThreadId(), LogLevelStr[enLogLevel], szBuffer) ){ Dispose();}

由于这是在Windows Embedded CE和Windows Mobile平台下的实现,所以都是有Unicode的API。下面是打印的日志,包含了级别。

2010-02-24T09:17:38 THR:de428d7e TRACE FILE=[.iToday.cpp], LINE=[44]2010-02-24T09:17:39 THR:de428d7e INFO FILE=[.iToday.cpp], LINE=[47]2010-02-24T09:17:39 THR:de428d7e WARN FILE=[.iToday.cpp], LINE=[50]2010-02-24T09:17:40 THR:de428d7e ERROR FILE=[.iToday.cpp], LINE=[53]2010-02-24T09:17:40 THR:de428d7e FATAL FILE=[.iToday.cpp], LINE=[56]2010-02-24T09:17:41 THR:de428d7e WARN FILE=[.iToday.cpp], LINE=[67]2010-02-24T09:17:42 THR:de428d7e ERROR FILE=[.iToday.cpp], LINE=[70]2010-02-24T09:17:42 THR:de428d7e FATAL FILE=[.iToday.cpp], LINE=[73]

时间与线程号

在多线程环境下,打印时间和线程十分重要,这样能查线程同步问题。时间和线程号见上面的日志。

使用Logger

void LoggerTest(){ Logger::Instance().Log(LOG_TRACE, _T("FILE=[%S], LINE=[%d]"), __FILE__, __LINE__); Sleep(500); Logger::Instance().Log(LOG_INFO, _T("FILE=[%S], LINE=[%d]"), __FILE__, __LINE__); Sleep(500);

上一页  1 2 3 4  下一页

Tags:Windows Mobile 使用

编辑录入:coldstar [复制链接] [打 印]
赞助商链接