qCDebug输出到日志文件

第一步:通过QLoggingCategory 类进行日志的输出

只说明了一种方式,其他方式可查看QLoggingCategory 说明文档。
第一步设置完成,可以在控制台输出窗口查看到qCDebug的输出信息。

  • 1.1 声明与创建QLoggingCategory
//在头文件中添加声明testlog对象
Q_DECLARE_LOGGING_CATEGORY(testlog)

//在对应的cpp文件中添加testlog的定义,可配置文件为testlog.log,第3个参数没传,表示所有QtMsgType类型都支持输出
//QtMsgType包括:QtDebugMsg,QtWarningMsg等
  Q_LOGGING_CATEGORY(testlog, "testlog.log")
  • 1.2 配置规则

配置规则的格式:
<category>[.<type>] = true|false
怎么确定对应的哪个模块,查看对应日志信息,如 :qCDebug(lcQpaMime) << FUNCTION 中,qCDebug的第一个参数的定义,就是模块的名称
Q_LOGGING_CATEGORY(lcQpaWindows, “qt.qpa.windows”)
Q_LOGGING_CATEGORY(lcQpaBackingStore, “qt.qpa.backingstore”)
Q_LOGGING_CATEGORY(lcQpaEvents, “qt.qpa.events”)
Q_LOGGING_CATEGORY(lcQpaGl, “qt.qpa.gl”)
Q_LOGGING_CATEGORY(lcQpaMime, “qt.qpa.mime”) //对应这个
Q_LOGGING_CATEGORY(lcQpaInputMethods, “qt.qpa.input.methods”)
Q_LOGGING_CATEGORY(lcQpaDialogs, “qt.qpa.dialogs”)
Q_LOGGING_CATEGORY(lcQpaTablet, “qt.qpa.input.tablet”)
Q_LOGGING_CATEGORY(lcQpaAccessibility, “qt.qpa.accessibility”)

配置规则有多种方法,其中一种方式是用setFilterRules函数。
其他方式可查看QLoggingCategory 的说明文档

//设置qt.qpa.mime模块的debug类型输出,这个模块的QCDebug信息输出
QLoggingCategory::setFilterRules("qt.qpa.mime.debug=true");

第二步:把调试信息输出到日志文件

添加完第二步,调试信息输出到对应的日志文件,控制台输出窗口不再输出调试信息。

  • 2.1 输出日志文档的函数
//声明一个全局的日志文件路径
QString sPath = "D:/QDebug" + QString(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss").append("-log.ini"));

//日志文件输出函数。这个函数也可以拆为两个,把加锁去掉,把写入文件的操作单独放到一个线程中。
void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
	// 加锁
	static QMutex mutex;
	mutex.lock();
	QByteArray localMsg = msg.toLocal8Bit();
	QString text;
	switch (type) {
	case QtDebugMsg:
		text = QString("Debug: ");
		break;
	case QtWarningMsg:
		text = QString("Warning: ");
		break;
	case QtCriticalMsg:
		text = QString("Critical:");
		break;
	case QtFatalMsg:
		text = QString("Fatal: ");
		break;
	default:
		text = QString("Debug: ");
	}

	// 设置输出信息格式
	QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line); // F文件L行数
	QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
	QString strMessage = QString("%1 %2 \t%3 \t%4").arg(text).arg(context_info).arg(strDateTime).arg(msg);
	// 输出信息至文件中(读写、追加形式)	
	QFile file(sPath);
	file.open(QIODevice::ReadWrite | QIODevice::Append);
	QTextStream stream(&file);
	stream << strMessage << "\r\n";
	file.flush();
	file.close();
	// 解锁
	mutex.unlock();
}
  • 2.2 注册
//程序开始时进行注册
qInstallMessageHandler(outputMessage);

第三:完整版

//.h
Q_DECLARE_LOGGING_CATEGORY(testlog)

//.cpp
Q_LOGGING_CATEGORY(testlog, "testlog.log")

//main
void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
//函数实现在上边
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

	QLoggingCategory::setFilterRules("qt.qpa.mime.debug=true");
	qInstallMessageHandler(outputMessage);
	
    dialog w;
    w.show();

    return a.exec();
}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值