Qt中简单的日志文件实现
来源:互联网 发布:淘宝退款金额怎么修改 编辑:程序博客网 时间:2024/04/30 01:18
最近看一个音乐播放器的源码的时候,看了一下他的日志输出实现,虽然代码量不多,但是功能倒是挺齐全,有点不足的是里面只是实现了单文件输出。
这里面理解起来没有什么掌握,我只是加了简单的注释
#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
0 0
- Qt中简单的日志文件实现
- log日志文件的简单实现
- qt中xml文件的简单读取
- 实现Qt日志输出到文件
- qt之输出日志到文件中
- Qt输出打印信息的日志到文件(简单的两种方式)
- 一个简单的Qt日志类 使用方便
- QT 简单的写日志功能
- 简单易用的Qt日志模块
- QT中简单的实现客户端和服务器的沟通
- Qt 中使用freeType2实现简单的文本渲染
- Qt中实现简单的菜单栏,工具栏和状态栏!
- Qt下写日志文件的函数
- QT 打印的简单实现
- QT 打印的简单实现
- Qt---多线程的简单实现
- QT实现简单的计算器
- Qt---多线程的简单实现
- php.ini配置文件的基本设置
- linux下mycat读写分离的配置
- 计算a+b
- 计算思维实践之路(六)
- strcpy和memcpy的区别
- Qt中简单的日志文件实现
- 数据库索引的实现
- Java并发编程
- 【NOIP模拟】树塔狂想曲
- Linux设备驱动之I/O端口与I/O内存
- Android原生数据库模型
- setTimeout 和 setInterval、undefined 和 null
- Android的Emoji表情
- 机房收费系统总结