#ifndef LOGGER1_H #define LOGGER1_H #include "LoggerModule_global.h" #include class LOGGER1_EXPORT LogHelper { Q_DISABLE_COPY(LogHelper) public: Q_DECL_CONSTEXPR LogHelper() : version_(1), line_(0), file_(Q_NULLPTR), function_(Q_NULLPTR) { } LogHelper(const char *fileName, int lineNumber, const char *functionName); enum LogType { LGDebugMsg, LGInfoMsg, LGWarningMsg, LGErrorMsg, LGFatalMsg }; QString TemplateParameter () { return ""; } template QString TemplateParameter(T head, Args ... args) { return QString("%1 ").arg(head) + TemplateParameter(args...); } template void debug(T head, Args ... args) { QString logmsg = QString("%1 ").arg(head) + TemplateParameter(args...); writelogToLocal(LGDebugMsg,logmsg); } template void info(T head, Args ... args) { QString logmsg = QString("%1 ").arg(head) + TemplateParameter(args...); writelogToLocal(LGInfoMsg,logmsg); } template void warn(T head, Args ... args) { QString logmsg = QString("%1 ").arg(head) + TemplateParameter(args...); writelogToLocal(LGWarningMsg,logmsg); } template void error(T head, Args ... args ) { QString logmsg = QString("%1 ").arg(head) + TemplateParameter(args...); writelogToLocal(LGErrorMsg,logmsg); } template void fatal(T head, Args ... args) { QString logmsg = QString("%1 ").arg(head) + TemplateParameter(args...); writelogToLocal(LGFatalMsg,logmsg); } virtual void writelogToLocal(LogType logtype, const QString& logmsg); virtual void copy(const LogHelper &logContext) { Q_UNUSED(logContext) } template inline LogHelper &operator<<(T logmsg) { writelogToLocal(LGInfoMsg, QString("%1").arg(logmsg)); return *this; } public: static bool showFileFuncLine_; int version_; int line_; const char *file_; const char *function_; public: static inline LogHelper* getSingletonPtr() { return &getSingleton(); } static inline LogHelper& getSingleton() { static LogHelper _instance; return _instance; } }; #define g_Logger LogHelper::getSingleton() #define g_pLogger LogHelper::getSingletonPtr() ////////////////////////////////////////////////////////////////////////// // 断言日志 ////////////////////////////////////////////////////////////////////////// #define ASSERT_LOG(expr)\ if ( (expr) ) {;} else g_Logger.Error(0, __FILE__, __LINE__, #expr); #endif // LOGGER1_H