Qt中简单的日志文件实现
2016-09-03 19:55
281 查看
最近看一个音乐播放器的源码的时候,看了一下他的日志输出实现,虽然代码量不多,但是功能倒是挺齐全,有点不足的是里面只是实现了单文件输出。
这里面理解起来没有什么掌握,我只是加了简单的注释
这里面理解起来没有什么掌握,我只是加了简单的注释
#ifndef MUSICLOGGER_H #define MUSICLOGGER_H /* ================================================= * This file is part of the TTK Music Player project * Copyright (c) 2014 - 2016 Greedysky Studio * All rights reserved! * Redistribution and use of the source code or any derivative * works are strictly forbiden. =================================================*/ #include <QFile> #include <QTextStream> #include <QDateTime> #include "musicglobaldefine.h" #define CURRENTTIME QTime::currentTime().toString("hh:mm:ss:zzz") #define CURRENTDATE QDate::currentDate().toString("yyyy-MM-dd") #define LOG_END QString("log::npos") #define M_LOGGER (*MusicLogger::createInstance()) #define M_MESSAGE(str, msg) \ { \ M_LOGGER.setLevel(msg); \ M_LOGGER << str << LOG_END;\ } #ifdef MUSIC_DEBUG #define M_LOGGER_INFO(str) M_MESSAGE(str, "[Info]") #define M_LOGGER_DEBUG(str) M_MESSAGE(str, "[Debug]") #define M_LOGGER_WARN(str) M_MESSAGE(str, "[Warn]") #define M_LOGGER_TRACE(str) M_MESSAGE(str, "[Trace]") #define M_LOGGER_ERROR(str) M_MESSAGE(str, "[Error]") #define M_LOGGER_FATAL(str) M_MESSAGE(str, "[Fatal]") #else #define M_LOGGER_INFO(str) Q_UNUSED(str) #define M_LOGGER_DEBUG(str) Q_UNUSED(str) #define M_LOGGER_WARN(str) Q_UNUSED(str) #define M_LOGGER_TRACE(str) Q_UNUSED(str) #define M_LOGGER_ERROR(str) Q_UNUSED(str) #define M_LOGGER_FATAL(str) Q_UNUSED(str) #endif /*! @brief The class of the application logger. * @author Greedysky <greedysky@163.com> */ class MUSIC_CORE_EXPORT MusicLogger { public: //通过静态初始化对象实现单例模式 static inline MusicLogger* createInstance() { static MusicLogger obj; return &obj; } /*! * Get object instance ptr. */ static QString getClassName() { return "MusicLogger"; } /*! * Get class object name. */ inline void setLevel(const QString &level) { m_levelType = level; } /*! * Set logger level. */ inline QString level() const { return m_levelType; } /*! * Get logger level. */ inline MusicLogger &operator <<(bool t) { #ifdef MUSIC_DEBUG m_streamString.append( QString("%1 ").arg(t ? "true" : "false") ); #else //取消编译器警告信息 Q_UNUSED(t); #endif return *this; } inline MusicLogger &operator<<(char t) { return debugData<char>(t); } inline MusicLogger &operator<<(signed short t) { return debugData<short>(t);} inline MusicLogger &operator<<(unsigned short t) { return debugData<ushort>(t); } inline MusicLogger &operator<<(signed int t) { return debugData<int>(t); } inline MusicLogger &operator<<(unsigned int t) { return debugData<uint>(t); } inline MusicLogger &operator<<(signed long t) { return debugData<long>(t); } inline MusicLogger &operator<<(unsigned long t) { return debugData<ulong>(t); } inline MusicLogger &operator<<(qint64 t) { return debugData<qint64>(t); } inline MusicLogger &operator<<(quint64 t) { return debugData<quint64>(t); } inline MusicLogger &operator<<(float t) { return debugData<float>(t); } inline MusicLogger &operator<<(double t) { return debugData<double>(t); } inline MusicLogger &operator<<(const char *t) { return debugData<const char*>(t); } inline MusicLogger &operator<<(const QString &t) { #ifdef MUSIC_DEBUG //每次遇到结束符号,导入文件 if(t == LOG_END) { m_stream << QString("[%1 %2]: %3").arg(CURRENTDATE).arg(CURRENTTIME).arg(m_streamString) << endl; m_streamString.clear(); } else { debugData<QString>(t); } #else Q_UNUSED(t); #endif return *this; } inline MusicLogger &operator<<(const QStringRef &t) { return debugData<QString>(t.toString()); } inline MusicLogger &operator<<(const QLatin1String &t) { return debugData<QLatin1String>(t); } inline MusicLogger &operator<<(const QByteArray &t) { return debugData<QString>(QString(t)); } /*! * Operator << override. */ private: MusicLogger() { #ifdef MUSIC_DEBUG m_file.setFileName("logger.txt"); m_file.open(QIODevice::WriteOnly | QIODevice::Append); m_stream.setDevice(&m_file); m_stream << QString().rightJustified(70, '=') << endl; m_levelType = "[Info]"; #endif } /*! * Object contsructor. */ ~MusicLogger() { #ifdef MUSIC_DEBUG m_file.close(); #endif } //用模板实现除str变量之外的所有<<函数的公用操作 template <class T> MusicLogger &debugData(const T &data) { #ifdef MUSIC_DEBUG m_streamString.append( QString("%1 %2 ").arg(m_levelType).arg(data) ); #else Q_UNUSED(data); #endif return *this; } /*! * Output debug data into local file. */ QTextStream m_stream;//关联日志导出文件 QString m_streamString;//每次写内容的时候作为临时缓存,当遇到结束符的时候一并导入文件 QString m_levelType;//日志类别 QFile m_file; }; #endif // MUSICLOGGER_H
相关文章推荐
- 实现Qt日志功能并输出到文件(qDebug\qWarning\ qCritical\qFatal)
- 简单实现:如何把所有的日志记录到同一个文件中???
- log日志文件的简单实现
- Qt输出打印信息的日志到文件(简单的两种方式)
- 最简单的基于VC的日志文件类库实现
- 实现Qt日志功能并输出到文件
- Ubuntu14.04实现简单日志文件服务器
- 实现Qt日志功能并输出到文件
- PHP实现简单的监控nginx日志文件功能
- 自行控制loadrunner的socket协议性能测试 (转) 一前言 二任务的提出 三实现方案讨论 四技术要点讲解 如何开始录制一个最简单的收发数据包脚本 写日志文件 一行一行读数据包文件 字
- 实现Qt日志功能并输出到文件(qDebug\qWarning\ qCritical\qFatal)
- 实现Qt日志功能并输出到文件(qDebug\qWarning\ qCritical\qFatal)
- 从Apache的日志文件收集和提供统计数据(一个Python插件架构的简单实现)
- SDL游戏开发教程06(利用BOOST库实现简单的文件日志功能)
- QT文件的转码实现简单加密解密
- PHP简单实现定时监控nginx日志文件功能示例
- 实现Qt日志输出到文件
- 实现Qt日志功能并输出到文件(使用qInstallMsgHandler安装customMessageHandler)good
- VS2005 Web项目安装部署:利用预编译的Dll 隐藏.cs文件 的简单实现
- 用简单的代码来实现文件上传