QMessageLogger:日志记录器的单例
QMessageLogger : Singleton for a Logger?
我想为我的应用程序实现一个日志记录器,因此我创建了一个类MyAppLogger派生自QMessageLogger。
假设我有几个其他类实现在我的Qt MyApp项目:
- MainWidget: QWidget
- HelpDialog: QDialog
- CalculateNumers
如何在不创建三个Logger的情况下向所有这些类提供Logger ?我想使用单例机制。但是我读到过单例是一种糟糕的编程技术!?
这里我创建了一个简单的项目,有两个空对话框。然后我有一个MyAppLogger,它将创建格式化字符串,如:
[MyApp] info 12:12:00:123[ms]_12.12.2012)对象'MyCalculator'创建于0xdeadbeef
[MyApp] fatal 12:12:00:123[ms]_12.12.2012] function 'divisionDouble'崩溃
当然需要正确的参数(currentSystemTimeInMillis(), functionname等,…)
示例Logger,想象有很多其他类,它们应该能够使用那些void info(…),debug(…),critical(…),fatal(…);等。标题:
#ifndef MYAPPLOGGER_H
#define MYAPPLOGGER_H
#include <QString>
#include <QFile>
class MyAppLogger
{
public:
MyAppLogger(QString outputFile);
void info(char* expression);
void debug(char* expression);
void critical(char* expression);
void fatal(char* expression);
private:
QFile * _debugFile;
};
#endif // MYAPPLOGGER_H
和相应的SRC:
#include "myapplogger.h"
MyAppLogger::MyAppLogger(QString outputFile)
{
_debugFile = new QFile(outputFile);
}
void MyAppLogger::critical(char *expression)
{
QString line("[MyAPP] t critical t SYS_TIME (12:45:00_12.12.2012) :: ");
line.append(expression);
// write line to a file
// write line to STD output
}
在我看来,你想达到两件事:
-
更改所有日志输出的输出格式。
你应该考虑使用qsetmessagpattern -
将所有日志输出写入文件:
不需要子类化QMessageLogger。只需使用qInstallMessageHandler来安装一个自定义处理程序,并将日志消息写入文件。
使用这两个方法的优点是,您可以使用qt自己的调试宏(qDebug(), qFatal()…),您不需要编写自己的MessageLogger或考虑singleton
- 为什么在单例中,检查类==空?
- C++ 实现模板单例类时出现链接错误
- 在类中存储单例的指针
- C++中的单例实现在调用 getInstance 函数时不会产生相同的类实例
- 创建 Spdlog 异步文件记录器时遇到困难
- 如何将自定义记录器与websocketpp一起使用?
- 具有非默认构造函数的单例类
- 使用 std::call_once 实现类似单例的功能
- 为什么单例使用指针而不是引用?
- 使用 c++ / QT 创建器从另一个类中设置和获取单例变量
- 记录器类的单例替代
- 用C++替换内存管理器的单例解决方案
- 指针成员的 C++/CLI 包装器 - C++ 单例实例
- c++日志器的单例模式
- 单例继承链接器错误
- 通用单例包装器类的设计
- c++链接器错误在单例类中未定义引用
- QMessageLogger:日志记录器的单例
- C++内联在一个单例中被忽略,并显示在我的探查器中.怎么会
- 单例或将指针传递给管理器中的静态引用