#ifndef __VR_LOG__H_ #define __VR_LOG__H_ #include #include #ifdef _WIN32 #define VR_UTILS_API #else // Linux/Unixƽ̨ #ifdef VR_UTILS_EXPORTS #define VR_UTILS_API __attribute__((visibility("default"))) #else #define VR_UTILS_API __attribute__((visibility("default"))) #endif #endif #ifdef _WIN32 // windows: #define logfilename(x) strrchr(x,'\\')?strrchr(x,'\\')+1:x #else // linux: #define logfilename(x) strrchr(x,'/')?strrchr(x,'/')+1:x #endif // _WIN32 #ifdef _WIN32 #pragma comment(lib, "advapi32.lib") #endif #define LOG_VERBOSE(...) VrLogUtils::EchoLog(KELOGLEVEL_Verbose, logfilename(__FILE__), __LINE__, "APPV", ##__VA_ARGS__) #define LOG_DEBUG(...) VrLogUtils::EchoLog(KELOGLEVEL_Debug, logfilename(__FILE__), __LINE__, "APPD", ##__VA_ARGS__) #define LOG_INFO(...) VrLogUtils::EchoLog(KELOGLEVEL_Info, logfilename(__FILE__), __LINE__, "APPI", ##__VA_ARGS__) #define LOG_WARNING(...) VrLogUtils::EchoLog(KELOGLEVEL_Warning, logfilename(__FILE__), __LINE__, "APPW", ##__VA_ARGS__) #define LOG_ERROR(...) VrLogUtils::EchoLog(KELOGLEVEL_Error, logfilename(__FILE__), __LINE__, "APPE", ##__VA_ARGS__) #define LOG_ERRO(...) VrLogUtils::EchoLog(KELOGLEVEL_Error, logfilename(__FILE__), __LINE__, "APPE", ##__VA_ARGS__) #define LOG_ERR(...) VrLogUtils::EchoLog(KELOGLEVEL_Error, logfilename(__FILE__), __LINE__, "APPE", ##__VA_ARGS__) /// @brief /// 日志等级 enum VrLogLevel { KELOGLEVEL_None = 0, KELOGLEVEL_Verbose = 1, KELOGLEVEL_Debug, KELOGLEVEL_Info, KELOGLEVEL_Warning, KELOGLEVEL_Error, }; enum VrLogType { KELOGTYPE_None = 0, KELOGTYPE_Console = 1, KELOGTYPE_Log4Cpp = 1 << 1, KELOGTYPE_All = 0xff, }; namespace VrLogUtils { /// 初始化log VR_UTILS_API void InitLog(); /// 关闭log VR_UTILS_API void UninitLog(); /// 输出log VR_UTILS_API void EchoLog(VrLogLevel eLogLevel, const char* sFilePath, const int nLine, const char* sLogGroup, const char* sFormat, ...); /// 修改log level default info VR_UTILS_API void AlterLogLevel(VrLogLevel eLogLevel); /// 修改log输出形式 默认都输出 VR_UTILS_API void AlterLogType(VrLogType eLogType); }; #endif