DtkCore
DTK Core module
Logger.h
浏览该文件的文档.
1// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4#ifndef LOGGER_H
5#define LOGGER_H
6
7#include <QString>
8#include <QDebug>
9#include <QDateTime>
10
11#include "dloggerdefs.h"
12
13DCORE_BEGIN_NAMESPACE
14
15class AbstractAppender;
16class LoggerPrivate;
17class LIBDTKCORESHARED_EXPORT Logger
18{
19 Q_DISABLE_COPY(Logger)
20public:
22 enum LogLevel {
23 Trace,
24 Debug,
25 Info,
26 Warning,
27 Error,
28 Fatal
29 };
30
32 Logger(const QString &defaultCategory);
34
36
37 static QString levelToString(LogLevel level);
38 static LogLevel levelFromString(const QString &str);
39
41 void registerCategoryAppender(const QString &category, AbstractAppender *appender);
42
43 void logToGlobalInstance(const QString &category, bool logToGlobal = false);
44
45 void setDefaultCategory(const QString &category);
46 QString defaultCategory() const;
47
48 void write(const QDateTime &time, LogLevel level, const char *file, int line,
49 const char *func, const char *category, const QString &msg);
50 void write(LogLevel level, const char *file, int line,
51 const char *func, const char *category, const QString &msg);
52 QDebug write(LogLevel level, const char *file, int line,
53 const char *func, const char *category);
54 void writeAssert(const char *file, int line,
55 const char *func, const char *condition);
56
57private:
58 void write(const QDateTime &time, LogLevel level, const char *file, int line,
59 const char *func, const char *category,
60 const QString &msg, bool fromLocalInstance);
61 Q_DECLARE_PRIVATE(Logger)
62 LoggerPrivate *d_ptr;
63};
64
65
66class LIBDTKCORESHARED_EXPORT CuteMessageLogger
67{
68 Q_DISABLE_COPY(CuteMessageLogger)
69
70public:
71 Q_DECL_CONSTEXPR CuteMessageLogger(Logger *l, Logger::LogLevel level,
72 const char *file, int line, const char *func)
73 : m_l(l),
74 m_level(level),
75 m_file(file),
76 m_line(line),
77 m_function(func),
78 m_category(nullptr)
79 {}
80
81 Q_DECL_CONSTEXPR CuteMessageLogger(Logger *l, Logger::LogLevel level, const char *file,
82 int line, const char *func, const char *category)
83 : m_l(l),
84 m_level(level),
85 m_file(file),
86 m_line(line),
87 m_function(func),
88 m_category(category)
89 {}
90
91 void write(const char *msg, ...) const
92#if defined(Q_CC_GNU) && !defined(__INSURE__)
93 #if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG)
94 __attribute__((format(gnu_printf, 2, 3)));
95 #else
96 __attribute__((format(printf, 2, 3)));
97 #endif
98#endif
99
100 void write(const QString &msg) const;
101 QDebug write() const;
102
103private:
104 Logger *m_l;
105 Logger::LogLevel m_level;
106 const char *m_file;
107 int m_line;
108 const char *m_function;
109 const char *m_category;
110};
111
112class LIBDTKCORESHARED_EXPORT LoggerTimingHelper
113{
114 Q_DISABLE_COPY(LoggerTimingHelper)
115public:
116 inline explicit LoggerTimingHelper(Logger *l, Logger::LogLevel level,
117 const char *file, int line, const char *func)
118 : m_logger(l),
119 m_logLevel(level),
120 m_file(file),
121 m_line(line),
122 m_function(func)
123 {}
124
125 void start(const char *msg, ...)
126#if defined(Q_CC_GNU) && !defined(__INSURE__)
127 #if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG)
128 __attribute__((format(gnu_printf, 2, 3)));
129 #else
130 __attribute__((format(printf, 2, 3)));
131 #endif
132#endif
133
134 void start(const QString &msg = QString());
135
137
138private:
139 Logger *m_logger;
140 QTime m_time;
141 Logger::LogLevel m_logLevel;
142 const char *m_file;
143 int m_line;
144 const char *m_function;
145 QString m_block;
146};
147
148DCORE_END_NAMESPACE
149#endif // LOGGER_H
AbstractAppender为应用消息的线程安全、互斥保护的日志提供了一个通用的实现
Definition: AbstractAppender.h:16
Definition: Logger.h:67
Definition: Logger.h:113
非常简单但相当强大的组件,可用于记录你的应用程序活动。
Definition: Logger.h:18
static QString levelToString(LogLevel level)
将LogLevel枚举值转换为其字符串表示
void registerAppender(AbstractAppender *appender)
注册appender来写入日志记录 在写入日志的调用中(使用其中一个宏或write()函数),Logger遍历appender列表,并向每个appender写入日志记录。请查阅AbstractAppe...
void writeAssert(const char *file, int line, const char *func, const char *condition)
写入断言
static Logger * globalInstance()
返回Logger的全局对象
QString defaultCategory() const
返回默认的日志类别名称
LogLevel
日志等级
Definition: Logger.h:22
void setDefaultCategory(const QString &category)
设置默认的日志类别 所有到这个类别应用的日志信息也将被写入一般的日志实例应用(使用registerAppender方法注册),反之亦然 特别是,任何对dDebug()宏的调用都将被视为类别日志 所以你不...
static LogLevel levelFromString(const QString &str)
将LogLevel字符串表示转换为枚举值
Logger()
构建Logger的实例。
QDebug write(LogLevel level, const char *file, int line, const char *func, const char *category)
这是为方便而提供的重载函数。它的行为与同名函数类似,此函数无需传入message参数
Logger(const QString &defaultCategory)
构建Logger的实例并设置Logger的默认类别
void write(const QDateTime &time, LogLevel level, const char *file, int line, const char *func, const char *category, const QString &msg)
写入日志记录。 将带有所提供参数的日志记录写给所有注册的应用
void logToGlobalInstance(const QString &category, bool logToGlobal=false)
将一些日志类别与全局日志实例应用者联系起来。 如果logToGlobal设置为 "true",所有到指定类别的Logger的日志消息也将被写入全局日志实例appenders(使用registerAppe...
~Logger()
析构函数
void registerCategoryAppender(const QString &category, AbstractAppender *appender)
注册appender,将日志记录写到特定的类别中
void write(LogLevel level, const char *file, int line, const char *func, const char *category, const QString &msg)
这是为方便而提供的重载函数。它的行为与同名函数类似,此函数无需传入time参数