博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ogre3D学习基础11 -- 日志文件的使用与异常处理
阅读量:4927 次
发布时间:2019-06-11

本文共 2464 字,大约阅读时间需要 8 分钟。

  用文件来记录 Ogre 系统初始化、运行、结束以及调试信息。使用日志便于我们调试程序。Ogre 日志系统由两个类组成:Log 类与 LogManager。

  1、Log类

  Log 类的一个对象对应于一个日志文件,log类中含有成员函数logMessage()负责向文件中填入信息。

1    void logMessage(const String& message, LogMessageLevel lml = LML_NORMAL); //

  第一个参数就是要写入的信息,第二个参数代表这条信息的重要程度,分三种

参数值 重要程度
LML_TIVIAL 最低
LML_NORMAL 一般
LML_CRITIAL 最高

  Log类中还有一个函数可用来设置日志文件的重要程度,

  void setLogDetail(LoggingLevel ll); //

    参数值分为三种:

参数值  日志文件的重要程度
LL_LOW 最低
LL_NORMAL 一般
LL_BOREME 最高

 

  2、LogManager类

  LogManager类用来管理各种日志文件,并负责向日志文件中输出信息。LogManager中含有创建Log对象的成员函数createLog()。

1   Log* createLog( const String& name, bool defaultLog = false, bool debuggerOutput = true ); //

    参数1对应日志文件名,参数2指是否把本文件设置为默认的日志文件,参数3指是否同时向调试窗口输出信息。

  成员函数1,   getLog()函数,通过文件名获取其他日志文件。

1  Log* getLog( const String& name);

  成员函数2, setLogDetail()函数,参数和Log的一样,分三种,参考上文。

  成员函数3, getDefaultLog()函数获取默认日志文件。

Log* getDefaultLog();

  成员函数4,  logMessage()函数向日志文件写入数据。有两个重载函数

1  void logMessage( const String& message, LogMessageLevel lml = LML_NORMAL); //同log的成员函数2  void logMessage( LogMessageLevel lml, const char* szMessage, ... ); //可一次写入多条信息

 

  实例代码:

 直接在createScene函数里添加如下代码:

1  void createScene(void) 2     { 3     Log *p_Log = LogManager::getSingleton().createLog( "test.log" ); //创建日志文件4     p_Log->logMessage( "this is a test!" ); //写入信息5 }

   3、异常处理

  ogre支持异常处理,并且封装了自己的类Exception ,它记录了错误的详细信息(错误编号、详细描述、错误发生的文件名、行数等)。当有错误发生时,Ogre 会抛出这个类型的异常,并把这个异常记录的错误信息写入到 LogManager 的默认日志文件中。

  Exception类含有几个成员函数

    第一, getFullDescription,它的返回值是 String 类型的,保存了对错误的详细描述。

    第二, _pushFuntion(),_popFunction()函数,对所使用的函数名进行入栈出栈操作。

  几个辅助宏

  Except(num, desc, src ) 相当于 throw( Exception( num, desc, src, __FILE__, __LINE__ ) )。

a, b, c 分别代表错误编号,错误描述与错误发生所在的函数。__FILE__和__LINE__是系统变量,它们的意思是错误发生时的代码文件和行数。 

  OgreGuard( a ) 相当于 Exception::_pushFunction( ( a ) )

  OgreUnguard( a ) 相当于 Exception::_popFunction( ( a ) )

 例子如下:

1      2     SwapTestApplication app; 3      4     try 5     { 6         app.go(); 7     } 8     catch (Ogre::Exception& e) 9     {10 #if   OGRE_PLATFORM == OGRE_PLATFORM_WIN3211         MessageBoxA(NULL, e.getFullDescription().c_str(), "Anexception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);12 #else13         fprintf(stderr, "An exception has occurred: %s\n",e.getFullDescription().c_str());14 #endif        15     }

  这段话说明了你在设计程序时可以选择控制台应用程序,也可以选择windows应用程序,选择不同,处理方式也不同。

  其中的try{}catch{}语句就是一场处理,在运行过程中,如果出现异常,就会自动抛出,而catch语句捕获异常并给出提示信息。

转载于:https://www.cnblogs.com/songliquan/p/3305478.html

你可能感兴趣的文章
用jquery来实现类似“网易新闻”横向标题滑动的移动端页面
查看>>
(原)基于物品的协同过滤ItemCF的mapreduce实现
查看>>
CSS可以和不可以继承的属性
查看>>
eclipse每次当我按ctrl+鼠标点击代码,自动关闭,产生原因及解决办法!!
查看>>
hbase
查看>>
用PHP将Unicode 转化为UTF-8
查看>>
HDOJ1002 A+B Problem II
查看>>
ADB server didn't ACK(adb不能开启
查看>>
网页内容抓取
查看>>
分布式和集群的区别
查看>>
Python基础(三)
查看>>
Sql server在cmd下的使用
查看>>
【BZOJ 1019】 1019: [SHOI2008]汉诺塔 (DP?)
查看>>
织梦DEDECMS系统中文章内容为空 用SQL语句如何删除?
查看>>
load data导入数据之csv的用法
查看>>
silverlight调用MVC WebApi方法
查看>>
建表sql实例
查看>>
区块链北大课程总结(课程1-密码学原理)
查看>>
web页面开发笔记(不断更新)
查看>>
<转>C#读取doc,pdf,ppt文件
查看>>