用文件来记录 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. (二)我的JavaScript系列:JavaScript面向对象旅程(下)

    剪不断,理还乱,是离愁. 前面已经提到过新语言开发的两个步骤,分别是:一.定义基本的数据类型,完善结构化编程语言的设计:二.为函数类型绑定this的概念,好在对象的方法中可以引用到对象自身.下面是继续 ...

  2. tsung基准测试方法、理解tsung.xml配置文件、tsung统计报告简介

    网上搜集的资料,资料来源于:http://blog.sina.com.cn/ishouke 1.tsung基准测试方法 https://pan.baidu.com/s/1Ne3FYo8XyelnJy8 ...

  3. js操作文档对象的节点

    好吧,为了能让大家不至于睡着,我们先回顾先前面的东东吧~ 1.首先我们写了javaScriput的是一门弱类型的解释性的脚本语言:弱类型:我们的变量不用申明其具体的数据类型,在使用的时候浏览器根据其存 ...

  4. HDU 5451 Best Solver(fibonacci)

    感谢这道题让我复习了一遍线代,还学习了一些奇奇怪怪的数论. 令 二项展开以后根号部分抵消了 显然有 所以要求的答案是 如果n比较小的话,可以直接对二项式快速幂,但是这题n很大 这个问题和矩阵的特征值以 ...

  5. css设置禁止文字被选中

    // 禁止文字被鼠标选中 moz-user-select: -moz-none; -moz-user-select: none; -o-user-select:none; -khtml-user-se ...

  6. 用python写trojan的过程中遇到的各种问题

    由于之前已经conn, addr = s.accept() 所以改为  conn.recv spyder无法同时运行client 和 server 分别在spyder和anaconda prompt运 ...

  7. python_91_正则表达式

    常用的正则表达式: '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r& ...

  8. 01_6_Struts_ActionWildcard_通配符配置

    01_6_Struts_ActionWildcard_通配符配置 1.Struts_ActionWildcard_通配符配置 1.1配置struts.xml文件 <package name=&q ...

  9. 计算机应用第三次作业:自动开机自动关机 常用DOS命令 关于文件文件夹

    一.自动开机 台式机启动时按住DEL键 进入一个蓝色的界面,界面上是英文提示 这个界面是BIOS  ,是在机器的ROM中存储 二.自动关机 自动重启 方法一在120秒钟后自动关机 win+r (RUN ...

  10. windows10蓝屏page fault in nonpaged area

    Windows系统最让人头疼的问题就是蓝屏了,总是出现得那么莫名其妙,而且造成原因也是千奇百怪的.所以,对于电脑蓝屏,系统迷也无法一次性讲清楚.前天,我的电脑就经历过这样的蓝屏page fault i ...