DtkCore
DTK Core module
|
非常简单但相当强大的组件,可用于记录你的应用程序活动。 更多...
#include <Logger.h>
Public 类型 | |
enum | LogLevel { Trace , Debug , Info , Warning , Error , Fatal } |
日志等级 更多... | |
Public 成员函数 | |
Logger () | |
构建Logger的实例。 更多... | |
Logger (const QString &defaultCategory) | |
构建Logger的实例并设置Logger的默认类别 更多... | |
~Logger () | |
析构函数 更多... | |
void | registerAppender (AbstractAppender *appender) |
注册appender来写入日志记录 在写入日志的调用中(使用其中一个宏或 write() 函数),Logger遍历appender列表,并向每个appender写入日志记录。请查阅AbstractAppender文档以了解appenders的概念。 如果没有appender被添加到Logger中,它就会退回到记录到std::cerr STL流中。 appender 要在Logger中注册的Appender 更多... | |
void | registerCategoryAppender (const QString &category, AbstractAppender *appender) |
注册appender,将日志记录写到特定的类别中 更多... | |
void | logToGlobalInstance (const QString &category, bool logToGlobal=false) |
将一些日志类别与全局日志实例应用者联系起来。 如果logToGlobal设置为 "true",所有到指定类别的Logger的日志消息也将被写入全局日志实例appenders(使用registerAppender() 注册)默认情况下,所有到特定类别的消息都只写到特定的类别应用者 (使用 registerCategoryAppender() 注册) 更多... | |
void | setDefaultCategory (const QString &category) |
设置默认的日志类别 所有到这个类别应用的日志信息也将被写入一般的日志实例应用(使用registerAppender方法注册),反之亦然 特别是,任何对dDebug()宏的调用都将被视为类别日志 所以你不需要用dCDebug()宏来指定类别名称 要取消默认的类别,传递一个空字符串作为参数 更多... | |
QString | defaultCategory () const |
返回默认的日志类别名称 更多... | |
void | write (const QDateTime &time, LogLevel level, const char *file, int line, const char *func, const char *category, const QString &msg) |
写入日志记录。 将带有所提供参数的日志记录写给所有注册的应用 更多... | |
void | write (LogLevel level, const char *file, int line, const char *func, const char *category, const QString &msg) |
这是为方便而提供的重载函数。它的行为与同名函数类似,此函数无需传入time参数 更多... | |
QDebug | write (LogLevel level, const char *file, int line, const char *func, const char *category) |
这是为方便而提供的重载函数。它的行为与同名函数类似,此函数无需传入message参数 更多... | |
void | writeAssert (const char *file, int line, const char *func, const char *condition) |
写入断言 更多... | |
静态 Public 成员函数 | |
static Logger * | globalInstance () |
返回Logger的全局对象 更多... | |
static QString | levelToString (LogLevel level) |
将LogLevel枚举值转换为其字符串表示 更多... | |
static LogLevel | levelFromString (const QString &str) |
将LogLevel字符串表示转换为枚举值 更多... | |
非常简单但相当强大的组件,可用于记录你的应用程序活动。
日志等级
值 | 序号 | 含义 |
---|---|---|
Trace | 0 | 追踪级别,可用于大部分不需要的记录,用于内部代码追踪 |
Debug | 1 | 调试级别,用于软件的调试。 |
Info | 2 | 信息级别,可用于信息记录,这可能不仅对开发者有意义 |
Warning | 3 | 警告,可以用来记录你的应用程序检测到的一些非致命的警告 |
Error | 4 | 错误,可能是一个较大问题,导致你的程序工作出错,但不至于崩溃 |
Fatal | 5 | 致命错误,用于不可恢复的错误,在写入日志记录后立即崩溃应用程序(终止) |
Logger Dtk::Core::Logger::Logger | ( | ) |
构建Logger的实例。
Logger Dtk::Core::Logger::Logger | ( | const QString & | defaultCategory | ) |
构建Logger的实例并设置Logger的默认类别
Logger Dtk::Core::Logger::~Logger | ( | ) |
析构函数
QString Dtk::Core::Logger::defaultCategory | ( | ) | const |
返回默认的日志类别名称
|
static |
返回Logger的全局对象
|
static |
将LogLevel字符串表示转换为枚举值
Logger::Debug
的枚举值
|
static |
将LogLevel枚举值转换为其字符串表示
void Dtk::Core::Logger::logToGlobalInstance | ( | const QString & | category, |
bool | logToGlobal = false |
||
) |
将一些日志类别与全局日志实例应用者联系起来。 如果logToGlobal设置为 "true",所有到指定类别的Logger的日志消息也将被写入全局日志实例appenders(使用registerAppender()
注册)
默认情况下,所有到特定类别的消息都只写到特定的类别应用者 (使用 registerCategoryAppender()
注册)
[in] | category | 类别名称 |
[in] | logToGlobal | 是否将日志写入全局日志appenders |
void Dtk::Core::Logger::registerAppender | ( | AbstractAppender * | appender | ) |
注册appender来写入日志记录
在写入日志的调用中(使用其中一个宏或write()
函数),Logger遍历appender列表,并向每个appender写入日志记录。请查阅AbstractAppender文档以了解appenders的概念。 如果没有appender被添加到Logger中,它就会退回到记录到std::cerr
STL流中。 appender 要在Logger中注册的Appender
void Dtk::Core::Logger::registerCategoryAppender | ( | const QString & | category, |
AbstractAppender * | appender | ||
) |
注册appender,将日志记录写到特定的类别中
调用这个方法,你可以将一些appender与命名的类别联系起来。 在调用特定类别的日志写入时(直接调用带有类别参数的write()
,写入默认类别,或使用特殊的dCDebug()
、dCWarning()
等宏), Logger只将日志信息写入注册的类别appender列表中。
你可以调用logToGlobalInstance()
将所有类别的日志信息传递给全局的Logger实例Appender(使用registerAppender()
注册)。 如果没有特定名称的类别应用程序被注册到记录器上,它就会退回到记录到std::cerr
STL流中,这两种方法都有简单的警告信息。
[in] | category | 类别名称 |
[in] | appender | 要在Logger中注册的Appender |
void Dtk::Core::Logger::setDefaultCategory | ( | const QString & | category | ) |
设置默认的日志类别 所有到这个类别应用的日志信息也将被写入一般的日志实例应用(使用registerAppender方法注册),反之亦然 特别是,任何对dDebug()宏的调用都将被视为类别日志 所以你不需要用dCDebug()宏来指定类别名称 要取消默认的类别,传递一个空字符串作为参数
QString defaultCategory()
[in] | category | 类别名称 |
void Dtk::Core::Logger::write | ( | const QDateTime & | time, |
LogLevel | level, | ||
const char * | file, | ||
int | line, | ||
const char * | func, | ||
const char * | category, | ||
const QString & | msg | ||
) |
写入日志记录。 将带有所提供参数的日志记录写给所有注册的应用
[in] | time | 时间戳 |
[in] | logLevel | 日志记录等级 |
[in] | file | 目标文件名 |
[in] | line | 要输出的行数 |
[in] | func | 输出的函数名称 |
[in] | category | 日志类别 |
[in] | message | 输出信息 |
Logger::Fatal
日志级别记录日志记录将导致调用STL abort()
函数, 这将中断你的软件的运行并Core dump QDebug Dtk::Core::Logger::write | ( | LogLevel | level, |
const char * | file, | ||
int | line, | ||
const char * | func, | ||
const char * | category | ||
) |
这是为方便而提供的重载函数。它的行为与同名函数类似,此函数无需传入message参数
这个函数不接受任何日志信息作为参数。它返回的是可以使用流函数写入的QDebug
对象
例如,你可能想写:
而不是写为:
这样会更优雅一些
请考虑阅读Qt参考文档,了解QDebug类的使用语法
[in] | logLevel | 日志记录等级 |
[in] | file | 目标文件名 |
[in] | line | 要输出的行数 |
[in] | func | 输出的函数名称 |
[in] | category | 日志类别 |
void Dtk::Core::Logger::write | ( | LogLevel | level, |
const char * | file, | ||
int | line, | ||
const char * | func, | ||
const char * | category, | ||
const QString & | msg | ||
) |
这是为方便而提供的重载函数。它的行为与同名函数类似,此函数无需传入time参数
QDateTime::currentDateTime()
用获得的当前时间戳 [in] | logLevel | 日志记录等级 |
[in] | file | 目标文件名 |
[in] | line | 要输出的行数 |
[in] | func | 输出的函数名称 |
[in] | category | 日志类别 |
[in] | message | 输出信息 |
void Dtk::Core::Logger::writeAssert | ( | const char * | file, |
int | line, | ||
const char * | func, | ||
const char * | condition | ||
) |
写入断言
这个函数使用write()函数来写断言记录
断言记录总是使用Logger::Fatal
日志级别来写,这将导致程序的中止和核心转储(core dump)的生成(如果支持) 写入appenders的信息与传入参数相同,前缀为 ASSERT:
[in] | file | 目标文件名 |
[in] | line | 要输出的行数 |
[in] | func | 输出的函数名称 |
LOG_ASSERT
宏,它将为这个函数提供所有需要的信息