1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later
#ifndef LOGAPPLICATIONHELPER_H
#define LOGAPPLICATIONHELPER_H
#include "structdef.h"
#include "dtkcore_config.h"
#ifdef DTKCORE_CLASS_DConfigFile
#include <DConfig>
#endif
#include <QMap>
#include <QObject>
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#include <QGSettings>
#endif
#include <mutex>
/**
* @brief The LogApplicationHelper class 获取应用日志文件路径信息工具类
*/
class LogApplicationHelper : public QObject
{
Q_OBJECT
public:
/**
* @brief instance 全局单列模式实现
* @return 此类的唯一对象
*/
static LogApplicationHelper *instance()
{
LogApplicationHelper *sin = m_instance.load();
if (!sin) {
//加锁 线程安全
std::lock_guard<std::mutex> lock(m_mutex);
sin = m_instance.load();
if (!sin) {
sin = new LogApplicationHelper();
m_instance.store(sin);
}
}
return sin;
}
QMap<QString, QString> getMap();
// 刷新并返回最新的应用配置信息
AppLogConfigList getAppLogConfigs();
//根据包名获得显示名称
QString transName(const QString &str);
//根据包名获得路径
QString getPathByAppId(const QString &str);
//获取所有其他日志文件列表(名称-路径)
QList<QStringList> getOtherLogList();
//获取所有自定义日志文件列表(名称-路径)
QList<QStringList> getCustomLogList();
AppLogConfig appLogConfig(const QString& app);
bool isAppLogConfigExist(const QString& app);
// 验证是否为有效的应用名
bool isValidAppName(const QString& appName);
QDateTime getLastReportTime();
void saveLastRerportTime(const QDateTime& date);
// 获取崩溃上报最大条数,默认为50
int getMaxReportCoredump();
private:
explicit LogApplicationHelper(QObject *parent = nullptr);
void init();
void initAppLog();
void initOtherLog();
void initCustomLog();
void createDesktopFiles();
void createLogFiles();
void createTransLogFiles();
void generateTransName(const QString &path, const QString &name, bool isDeepin, bool isGeneric, bool isName);
QString getLogFile(const QString &path);
void loadAppLogConfigsByJson();
AppLogConfig jsonAppLogConfig(const QString& app);
bool isJsonAppLogConfigExist(const QString& app);
void validityJsonLogPath(SubModuleConfig& submodule);
signals:
void sigValueChanged(const QString &key);
public slots:
private:
/**
* @brief m_en_log_map 应用包名-日志路径键值对
*/
QMap<QString, QString> m_en_log_map;
/**
* @brief m_en_trans_map 应用包名-应用显示文本键值对
*/
QMap<QString, QString> m_en_trans_map;
/**
* @brief m_trans_log_map 应用显示文本-日志路径键值对
*/
QMap<QString, QString> m_trans_log_map;
/**
* @brief m_other_log_list 所有其他日志列表,每项包含名称、路径
*/
QList<QStringList> m_other_log_list;
/**
* @brief m_custom_log_list 所有自定义日志列表,每项包含名称、路径
*/
QList<QStringList> m_custom_log_list;
/**
* @brief m_desktop_files 所有符合条件的应用的desktop文件路径
*/
QStringList m_desktop_files;
/**
* @brief m_log_files 所有符合条件的应用的日志文件路径
*/
QStringList m_log_files;
/**
* @brief m_current_system_language 系统语言
*/
QString m_current_system_language;
/**
* @brief m_appLogConfigs 应用日志json配置信息
*/
AppLogConfigList m_JsonAppLogConfigs;
/**
* @brief m_appLogConfigs 应用日志配置信息(包含json配置信息)
*/
AppLogConfigList m_appLogConfigs;
/**
* @brief m_instance 单例用的本类指针的原子性封装
*/
static std::atomic<LogApplicationHelper *> m_instance;
/**
* @brief m_mutex 单例用的锁
*/
static std::mutex m_mutex;
#ifdef DTKCORE_CLASS_DConfigFile
//dconfig,自定义日志配置
Dtk::Core::DConfig *m_pDConfig = nullptr;
#endif
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
//gsettings,自定义日志配置
QGSettings *m_pGSettings = nullptr;
#endif
};
#endif // LOGAPPLICATIONHELPER_H
|