DtkCore
DTK Core module
Dtk::Core::Logger类 参考

非常简单但相当强大的组件,可用于记录你的应用程序活动。 更多...

#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::cerrSTL流中。 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 LoggerglobalInstance ()
 返回Logger的全局对象 更多...
 
static QString levelToString (LogLevel level)
 将LogLevel枚举值转换为其字符串表示 更多...
 
static LogLevel levelFromString (const QString &str)
 将LogLevel字符串表示转换为枚举值 更多...
 

详细描述

非常简单但相当强大的组件,可用于记录你的应用程序活动。

成员枚举类型说明

◆ LogLevel

日志等级

序号 含义
Trace 0 追踪级别,可用于大部分不需要的记录,用于内部代码追踪
Debug 1 调试级别,用于软件的调试。
Info 2 信息级别,可用于信息记录,这可能不仅对开发者有意义
Warning 3 警告,可以用来记录你的应用程序检测到的一些非致命的警告
Error 4 错误,可能是一个较大问题,导致你的程序工作出错,但不至于崩溃
Fatal 5 致命错误,用于不可恢复的错误,在写入日志记录后立即崩溃应用程序(终止)

构造及析构函数说明

◆ Logger() [1/2]

Logger Dtk::Core::Logger::Logger ( )

构建Logger的实例。

注解
如果你只使用一个全局的logger实例,不需要手动使用这个构造函数,可以考虑使用logger宏来代替访问记录器实例

◆ Logger() [2/2]

Logger Dtk::Core::Logger::Logger ( const QString &  defaultCategory)

构建Logger的实例并设置Logger的默认类别

注解
如果你只使用一个全局的logger实例,不需要手动使用这个构造函数, 可以考虑使用logger宏来访问logger实例并调用setDefaultCategory方法
参见
Logger::Logger()
Logger::setDefaultCategory()

◆ ~Logger()

Logger Dtk::Core::Logger::~Logger ( )

析构函数

注解
你可能不需要直接使用这个函数。记录器的全局实例将在你的QCoreApplication执行结束后自动销毁

成员函数说明

◆ defaultCategory()

QString Dtk::Core::Logger::defaultCategory ( ) const

返回默认的日志类别名称

参见
Logger::setDefaultCategory()

◆ globalInstance()

static Logger * Dtk::Core::Logger::globalInstance ( )
static

返回Logger的全局对象

注解
在大多数情况下,你不应该直接使用这个函数。可以考虑使用 logger 宏来代替
返回
Logger指针

◆ levelFromString()

static LogLevel Dtk::Core::Logger::levelFromString ( const QString &  str)
static

将LogLevel字符串表示转换为枚举值

注解
字符串的比较是不分大小写的。如果提供的日志级别字符串不合法,则返回Logger::Debug的枚举值
参见
Logger::LogLevel
Logger::levelToString()

◆ levelToString()

static QString Dtk::Core::Logger::levelToString ( Logger::LogLevel  level)
static

将LogLevel枚举值转换为其字符串表示

参见
Logger::LogLevel

◆ logToGlobalInstance()

void Dtk::Core::Logger::logToGlobalInstance ( const QString &  category,
bool  logToGlobal = false 
)

将一些日志类别与全局日志实例应用者联系起来。 如果logToGlobal设置为 "true",所有到指定类别的Logger的日志消息也将被写入全局日志实例appenders(使用registerAppender()注册)
默认情况下,所有到特定类别的消息都只写到特定的类别应用者 (使用 registerCategoryAppender() 注册)

参数
[in]category类别名称
[in]logToGlobal是否将日志写入全局日志appenders
参见
Logger::registerAppender()
Logger::globalInstance()
Logger::registerCategoryAppender()

◆ registerAppender()

void Dtk::Core::Logger::registerAppender ( AbstractAppender appender)

注册appender来写入日志记录
在写入日志的调用中(使用其中一个宏或write()函数),Logger遍历appender列表,并向每个appender写入日志记录。请查阅AbstractAppender文档以了解appenders的概念。 如果没有appender被添加到Logger中,它就会退回到记录到std::cerrSTL流中。 appender 要在Logger中注册的Appender

注解
Logger对appender拥有所有权,它将在应用程序退出时删除它。根据这一点,appender必须在堆上创建,以防止appender被重复销毁。
参见
Logger::registerCategoryAppender()
Dtk::Core::AbstractAppender

◆ registerCategoryAppender()

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
注解
Logger对appender拥有所有权,它将在应用程序退出时删除它。根据这一点,appender必须在堆上创建,以防止appender被重复销毁。
参见
Logger::registerAppender()
Logger::logToGlobalInstance()
Logger::setDefaultCategory()

◆ setDefaultCategory()

void Dtk::Core::Logger::setDefaultCategory ( const QString &  category)

设置默认的日志类别 所有到这个类别应用的日志信息也将被写入一般的日志实例应用(使用registerAppender方法注册),反之亦然 特别是,任何对dDebug()宏的调用都将被视为类别日志 所以你不需要用dCDebug()宏来指定类别名称 要取消默认的类别,传递一个空字符串作为参数

QString defaultCategory()

参数
[in]category类别名称
注解
"category "格式标记将被设置为所有这些消息的类别名称
参见
Dtk::Core::AbstractStringAppender::setFormat()
Logger::defaultCategory()
Logger::registerCategoryAppender()
Logger::logToGlobalInstance()

◆ write() [1/3]

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
参见
Logger::LogLevel
Dtk::Core::AbstractAppender

◆ write() [2/3]

QDebug Dtk::Core::Logger::write ( LogLevel  level,
const char *  file,
int  line,
const char *  func,
const char *  category 
)

这是为方便而提供的重载函数。它的行为与同名函数类似,此函数无需传入message参数

这个函数不接受任何日志信息作为参数。它返回的是可以使用流函数写入的QDebug对象
例如,你可能想写:

dDebug() << "This is the size" << size << "of the element" << elementName;

而不是写为:

dDebug(QString(QLatin1String("This is the size %1x%2 of the element %3")).arg(size.x()).arg(size.y()).arg(elementName));

这样会更优雅一些
请考虑阅读Qt参考文档,了解QDebug类的使用语法

注解
这个重载肯定是最好用的一个重载,但是代价是它会比其他的重载更为慢
参见
Logger::write(const QDateTime &time, LogLevel level, const char *file, int line,const char *func, const char *category, const QString &msg)
参数
[in]logLevel日志记录等级
[in]file目标文件名
[in]line要输出的行数
[in]func输出的函数名称
[in]category日志类别

◆ write() [3/3]

void Dtk::Core::Logger::write ( LogLevel  level,
const char *  file,
int  line,
const char *  func,
const char *  category,
const QString &  msg 
)

这是为方便而提供的重载函数。它的行为与同名函数类似,此函数无需传入time参数

注解
这个函数使用了QDateTime::currentDateTime()用获得的当前时间戳
参见
Logger::write(const QDateTime &time, LogLevel level, const char *file, int line,const char *func, const char *category, const QString &msg)
参数
[in]logLevel日志记录等级
[in]file目标文件名
[in]line要输出的行数
[in]func输出的函数名称
[in]category日志类别
[in]message输出信息

◆ writeAssert()

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宏,它将为这个函数提供所有需要的信息
参见
Logger::write(const QDateTime &time, LogLevel level, const char *file, int line,const char *func, const char *category, const QString &msg)

该类的文档由以下文件生成: