资源简介
日志模块,主要功能:1.自动打印信息至日志文件;2.软件意外退出时保留信息以便跟踪问题。包括日志文件大小管理,数量管理。详见http://blog.csdn.net/lm409/article/details/74908484
代码片段和文件信息
#include “LogHandler.h“
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LOGLIMIT_NUM 2 //日志文件存档个数
#define LOGLIMIT_SIZE 500 //单个日志文件存档大小限制,单位KB
/************************************************************************************************************
* *
* LogHandlerPrivate *
* *
***********************************************************************************************************/
struct LogHandlerPrivate {
LogHandlerPrivate();
~LogHandlerPrivate();
// 打开日志文件 protocal.log,如果日志文件不是当天创建的,则使用创建日期把其重命名为 yyyy-MM-dd.log,并重新创建一个 protocal.log
void openAndBackupLogFile();
// 消息处理函数
static void messageHandler(QtMsgType type const QMessageLogContext &context const QString &msg);
// 如果日志所在目录不存在,则创建
void makeSureLogDirectory() const;
// 检测当前日志文件大小
void checkLogFiles();
QDir logDir; // 日志文件夹
QTimer renameLogFileTimer; // 重命名日志文件使用的定时器
QTimer flushLogFileTimer; // 刷新输出到日志文件的定时器
QDateTime logFileCreatedDate; // 日志文件创建的时间
static QFile *logFile; // 日志文件
static QTextStream *logOut; // 输出日志的 QTextStream,使用静态对象就是为了减少函数调用的开销
static QMutex logMutex; // 同步使用的 mutex
};
// 初始化 static 变量
QMutex LogHandlerPrivate::logMutex;
QFile* LogHandlerPrivate::logFile = NULL;
QTextStream* LogHandlerPrivate::logOut = NULL;
LogHandlerPrivate::LogHandlerPrivate() {
logDir.setPath(“Log“); // TODO: 日志文件夹的路径,为 exe 所在目录下的 log 文件夹,可从配置文件读取
QString logPath = logDir.absoluteFilePath(“protocal.log“); // 日志的路径
// 日志文件创建的时间
// QFileInfo::created(): On most Unix systems this function returns the time of the last status change.
// 所以不能运行时使用这个函数检查创建时间,因为会在运行时变化,所以在程序启动时保存下日志文件创建的时间
logFileCreatedDate = QFileInfo(logPath).lastModified();
//QString temp= logFileCreatedDate.toString(“yyyy-MM-dd hh:mm:ss“);
// 打开日志文件,如果不是当天创建的,备份已有日志文件
openAndBackupLogFile();
// 五分钟检查一次日志文件创建时间
renameLogFileTimer.setInterval(1000 * 60 * 5); // TODO: 可从配置文件读取
//renameLogFileTimer.setInterval(1000*60); // 为了快速测试看到日期变化后是否新创建了对应的日志文件,所以 1 分钟检查一次
renameLogFileTimer.start();
Qobject::connect(&renameLogFileTimer &QTimer::timeout [this] {
QMutexLocker locker(&LogHandlerPrivate::logMutex);
openAndBackupLogFile();
});
// 定时刷新日志输出到文件,尽快的能在日志文件里看到最新的日志
flushLogFileTimer.setInterval(1000); // TODO: 可从配置文件读取
flushLogFileTimer.start();
Qobject::connect(&flushLogFileTimer &Q
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 19014 2017-07-10 16:13 简单易用的Qt日志模块\LogHandler.cpp
文件 1447 2017-07-10 16:14 简单易用的Qt日志模块\LogHandler.h
文件 623 2017-07-10 16:14 简单易用的Qt日志模块\main.cpp
文件 3071 2017-07-10 16:14 简单易用的Qt日志模块\Singleton.h
目录 0 2017-07-10 16:13 简单易用的Qt日志模块
----------- --------- ---------- ----- ----
24155 5
评论
共有 条评论