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

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

    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()。

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

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

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

  Log* getLog( const String& name); 

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

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

 Log* getDefaultLog(); 

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

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

  实例代码:

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

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

  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 ) )

例子如下:

     SwapTestApplication app;

     try
{
app.go();
}
catch (Ogre::Exception& e)
{
#if   OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBoxA(NULL, e.getFullDescription().c_str(), "Anexception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
fprintf(stderr, "An exception has occurred: %s\n",e.getFullDescription().c_str());
#endif
}

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

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

ogre3D学习基础11 -- 日志文件的使用与异常处理的更多相关文章

  1. ogre3D学习基础11 -- 交换两个场景管理器

    这一节,练习一下前几次学习的内容,功能很简单,就是建立两个不同的场景管理器,当按下键盘上某个键时切换镜头. 基本框架不变,这个监听器继承了两个父类,一个是我们的老朋友ExampleFrameListe ...

  2. Go语言学习之11 日志收集系统kafka库实战

    本节主要内容: 1. 日志收集系统设计2. 日志客户端开发 1. 项目背景    a. 每个系统都有日志,当系统出现问题时,需要通过日志解决问题    b. 当系统机器比较少时,登陆到服务器上查看即可 ...

  3. ogre3D学习基础1 -- 核心对象与脚本技术

    一.核心对象介绍1.命名空间 Ogre3d使用了C++的特性--命名空间,可以防止命名混淆.使用方法也简单,using namespace Ogre;或者直接在使用时加上“Ogre::”的前缀,如Og ...

  4. ogre3D学习基础5 -- 阴影与动画

    五.阴影 阴影是渲染一个真实场景的重要组成部分,它可以给场景中的物体提供更加真实的感觉,同时还可以帮助用户更好的了解对象间的空间关系. 启用阴影: 缺省情况下,阴影是关闭的,开启方式如下: 1.建立场 ...

  5. ogre3D学习基础18 -- 材质的使用与脚本的简单书写

    这一节以基础16为基础,练习材质的使用. 第一,看看框架 //material #include "ExampleApplication.h" class TutorialAppl ...

  6. ogre3D学习基础3 -- 粒子与表层脚本

    9.粒子脚本 粒子脚本允许你实例化地在你的脚本代码中定义粒子系统,而不必在源代码中进行设置,使得你做任何修改都能得到快速回应.脚本里定义的粒子系统被用作模板,并且多个实际的系统可以在运行时从这里被创建 ...

  7. CUBRID学习笔记 13 日志文件

    欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com . 过错 CUBRID Broker Log Files  可以理解为数据库中间件日志 ...

  8. Python学习—基础篇之文件操作

    文件操作 文件操作也是编程中需要熟练掌握的技能,尤其是在后台接口编写和数据分析过程中,对各种类型的文件进行操作,获取文件信息或者对信息进行存储是十分重要的.本篇博客中将主要对常见的文本格式文件和Exc ...

  9. android基础篇------------java基础(11)(文件解析xml and Json )

    一:xml文件解析 首先看一下:我们要解析的内容: <?xml version="1.0" encoding="gbk" ?> - <book ...

随机推荐

  1. intelliJ idea 激活和配置

    1. 双击打开 Intellij IDEA 桌面快捷方式图标,如下图: 2. 点击 ok 按钮,进入激活页面: 3. 他提供的三种方式激活:账号激活,激活码激活,服务器地址激活,我们选择激活码激活,去 ...

  2. IT部门域事件与业务分析

    IT event--->system--->IT dept |--------------->IT dept |--------------->system 域事件分类: 直接 ...

  3. (外挂破解)Cheat Engine(内存修改工具)V6.2中文版软件介绍

    Heat Engine是一款内存修改编辑工具,Cheat Engine允许你修改你的游戏,所以你将总是赢.它包括16进制编辑,反汇编程序,内存查找工具.与同类修改工具相比,它具有强大的反汇编功能,且自 ...

  4. Java 原型模式(克隆模式)

      Java 的设计模式有 23 种,前段时间小编已经介绍了单例模式,由于我们在学习 Spring 的时候在 bean 标签的学习中碰到了今天要讲的原型模式,那么小编就已本文来介绍下原型模式. 原型模 ...

  5. ubuntu下安装eclipse<转>

    转载自http://my.oschina.net/u/1407116/blog/227084      http://my.oschina.net/u/1407116/blog/227087 一 JD ...

  6. VA助手添加扩展文件后缀名

    Allow C/C++ files with a non-standard extension Follow these steps to make Visual Assist consider as ...

  7. java基础—流

    一.JAVA流式输入/输出原理

  8. 零拷贝详解 Java NIO学习笔记四(零拷贝详解)

    转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...

  9. Linux - 后台运行 ctrl + z , jobs , bg , fg

    一.& 最经常被用到 这个用在一个命令的最后,可以把这个命令放到后台执行 二.ctrl + z 可以将一个正在前台执行的命令放到后台,并且暂停三.jobs查看当前有多少在后台运行的命令四.fg ...

  10. mysql 的 case when 用法

    正确的格式: case when condition then result when condition then result when condition then result else re ...