用文件来记录Ogre系统初始化、运行、结束以及调试信息。使用日志便于我们调试程序。
Ogre日志系统由两个类组成:Log类与LogManager。下面我们分别来看这两个类。
代表用于记录信息的日志。Log类的一个对象对应于一个日志文件。
Log类提供了向日志文件写信息的函数logMessage,其定义如下:
void logMessage(const String& message, LogMessageLevel lml = LML_NORMAL);
参数message,String类型的变量,存储要写入的信息。
参数lml,指定传入信息的级别,来衡量一条信息的重要程度。
参数值 |
信息的重要程度 |
LML_TRIVIAL |
最低 |
LML_NORMAL |
一般 |
LML_CRITIAL |
最高 |
为了判断一条信息的重要性,从而决定是否将该信息写入日志文件。我们不光要衡量信息的重要程度,还应该同时考虑日志文件的重要程度。Log类提供了一个函数setLogDetail来设置日志文件的重要程度,其定义如下:
void setLogDetail(LoggingLevel ll);
参数ll,指定该日志文件的级别,来衡量日志文件的重要程度。
参数值 |
代表日志文件的重要程度 |
LL_LOW |
最低 |
LL_NORMAL |
一般 |
LL_BOREME |
最高 |
管理所有Log类的对象,也就是管理所有的日志文件。并负责向日志文件中输出信息。
LogManager类提供了创建Log对象的成员函数createLog。
注意,不要用Log类直接创建对象,而要用LogManager的createLog函数来创建Log对象。因为这保证了:使LogManager维护所有的Log对象,通过LogManager可以方便地进行查找等操作。createLog定义如下:
Log* createLog( const String& name, bool defaultLog = false, bool debuggerOutput = true );
参数name是String类型的,它指定所创建日志文件的文件名,如Ogre.log。
参数defaultLog是布尔类型的,如果为true,则把当前创建的日志文件设置为LogManager默认的日志文件。调用LogManager的接口函数都对此文件生效。
参数debuggerOutput是布尔类型的,如果为true,则不只向日志文件中输出信息,还向调试窗口中输出信息。
成员函数getLog可以通过文件名得到其代表的Log对象。它的定义如下:
Log* getLog( const String& name);
参数name指定了要查找的日志文件名。
设置默认Log文件级别的成员函数:
void setLogDetail(LoggingLevel ll);
参数ll指定默认日志文件的重要程度,它可以是:
参数值 |
信息的重要程度 |
LML_TRIVIAL |
最不重要 |
LML_NORMAL |
一般 |
LML_CRITIAL |
最重要 |
成员函数getDefaultLog返回默认的Log对象
Log* getDefaultLog();
成员函数logMessage向默认的日志文件中写入信息,它有两种形式:
void logMessage( const String& message, LogMessageLevel lml = LML_NORMAL);
void logMessage( LogMessageLevel lml, const char* szMessage, ... );
参数lml指定传入的信息的重要程度。
第一个logMessage可以向日志文件中写入一条信息。第二个logMessage可以写入接收的多条信息。
重载ExampleApplication内的createScene函数,在函数内创建一个名为Test.log的日志文件,并向该文件中写入一段信息。
#include "LogManager.h" using namespace NASA; LogManager logMgr; void main() { //if(LogManager::getSingletonPtr() == 0) //{ //mLogManager = OGRE_NEW LogManager(); //mLogManager->createLog(logFileName, true, true); //} Log *p_Log = LogManager::getSingleton().createLog( "test.log" ); p_Log->logMessage( "I write a message to test.log" ); }
在createScene函数中,首先调用LogManager的createLog成员函数来创建一个名为test.log的日志文件,并用p_Log保存此日志文件的指针。然后,我们通过Log的成员函数logMessage向test.log中写入一句话。
执行一遍程序后,你会发现程序可执行文件所在的目录下多了一个名为test.log的文件,接着打开test.log,你会看见一行字:I write a message to test.log。
当然,这个程序所做的并没有什么意义。它的目的只是演示一下Ogre日志系统的使用方法,
关于Ogre日志系统的应用,在下一部分异常处理中还有介绍。