code_device/sdk/hginclude/hg_log.h

207 lines
8.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// this file is include huagao logging tools
//
// created: 2022-02-09
//
#pragma once
#include <string>
#ifdef WIN32
#define bzero(a, l) memset(a, 0, l)
#endif
#ifdef OEM_HANWANG
#define hg_log hw_log
#define hg_log_type hw_log_type
#define hg_log_level hw_log_level
#elif defined(OEM_LISICHENG)
#define hg_log lsc_log
#define hg_log_type lsc_log_type
#define hg_log_level lsc_log_level
#endif
enum hg_log_type
{
LOG_TYPE_NONE = 0, // no logging
LOG_TYPE_CONSOLE, // print to console
LOG_TYPE_FILE, // write log into file
LOG_TYPE_CALLBACK, // invoke callback log_callback
};
enum hg_log_level
{
LOG_LEVEL_ALL = 0,
LOG_LEVEL_DEBUG_INFO,
LOG_LEVEL_WARNING,
LOG_LEVEL_FATAL,
};
typedef void (*log_callback)(hg_log_level, const char* info);
#ifdef EXPORT_AS_C
extern "C"
{
#endif
namespace hg_log
{
std::string format_ptr(void* ptr);
std::string format_current_thread_id(void);
std::string current_time(void);
std::string format_size(unsigned long size);
std::string u2utf8(const wchar_t* u);
std::string pe_path(std::string* name = nullptr);
unsigned long long available_memory(void);
// Function: initialize the logging type and level
//
// Parameters: type - log type
//
// level - log level. only the information can be logged if it's level was not less than this level
//
// log_file - when type was 'LOG_TYPE_FILE', specify the logging file path. default is "/tmp/hgscanner.log"
//
// Return: 0 - success, or -1 in LOG_TYPE_FILE and log_file cannot be created
int init(hg_log_type type = LOG_TYPE_NONE, hg_log_level level = LOG_LEVEL_DEBUG_INFO, char* log_file = 0);
void log(hg_log_level level, const char* info);
// 由于64-bits下变参解析会出现错位现象目前不建议使用该接口
void vlog(hg_log_level level, const char* fmt, ...);
}
#ifdef EXPORT_AS_C
}
#endif
// 为方便变参调试信息输出定义几个参数的宏。宏中“bytes”参数意义为该条日志信息所需要的最小空间字节
#if defined(WIN32) && !defined(EXPORT_SANE_API)
#define HG_LOG(level, info) \
{ \
unsigned int l = level; \
hg_scanner_mgr::ui_default_callback(NULL, SANE_EVENT_WIN_DEBUG_INFO, (void*)info, &l, NULL); \
}
#define HG_VLOG_1(level, bytes, fmt, arg1) \
{ \
char* msgbuf = (char*)malloc(bytes); \
sprintf(msgbuf, fmt, arg1); \
unsigned int l = level; \
hg_scanner_mgr::ui_default_callback(NULL, SANE_EVENT_WIN_DEBUG_INFO, msgbuf, &l, NULL); \
free(msgbuf); \
}
#define HG_VLOG_MINI_1(level, fmt, arg1) HG_VLOG_1(level, 256, fmt, arg1)
#define HG_VLOG_2(level, bytes, fmt, arg1, arg2) \
{ \
char* msgbuf = (char*)malloc(bytes); \
sprintf(msgbuf, fmt, arg1, arg2); \
unsigned int l = level; \
hg_scanner_mgr::ui_default_callback(NULL, SANE_EVENT_WIN_DEBUG_INFO, msgbuf, &l, NULL); \
free(msgbuf); \
}
#define HG_VLOG_MINI_2(level, fmt, arg1, arg2) HG_VLOG_2(level, 256, fmt, arg1, arg2)
#define HG_VLOG_3(level, bytes, fmt, arg1, arg2, arg3) \
{ \
char* msgbuf = (char*)malloc(bytes); \
sprintf(msgbuf, fmt, arg1, arg2, arg3); \
unsigned int l = level; \
hg_scanner_mgr::ui_default_callback(NULL, SANE_EVENT_WIN_DEBUG_INFO, msgbuf, &l, NULL); \
free(msgbuf); \
}
#define HG_VLOG_MINI_3(level, fmt, arg1, arg2, arg3) \
HG_VLOG_3(level, 256, fmt, arg1, arg2, arg3)
#define HG_VLOG_4(level, bytes, fmt, arg1, arg2, arg3, arg4) \
{ \
char* msgbuf = (char*)malloc(bytes); \
sprintf(msgbuf, fmt, arg1, arg2, arg3, arg4); \
unsigned int l = level; \
hg_scanner_mgr::ui_default_callback(NULL, SANE_EVENT_WIN_DEBUG_INFO, msgbuf, &l, NULL); \
free(msgbuf); \
}
#define HG_VLOG_MINI_4(level, fmt, arg1, arg2, arg3, arg4) \
HG_VLOG_4(level, 256, fmt, arg1, arg2, arg3, arg4)
#define HG_VLOG_5(level, bytes, fmt, arg1, arg2, arg3, arg4, arg5) \
{ \
char* msgbuf = (char*)malloc(bytes); \
sprintf(msgbuf, fmt, arg1, arg2, arg3, arg4, arg5); \
unsigned int l = level; \
hg_scanner_mgr::ui_default_callback(NULL, SANE_EVENT_WIN_DEBUG_INFO, msgbuf, &l, NULL); \
free(msgbuf); \
}
#define HG_VLOG_MINI_5(level, fmt, arg1, arg2, arg3, arg4, arg5) \
HG_VLOG_5(level, 256, fmt, arg1, arg2, arg3, arg4, arg5)
#define HG_VLOG_6(level, bytes, fmt, arg1, arg2, arg3, arg4, arg5, arg6)\
{ \
char* msgbuf = (char*)malloc(bytes); \
sprintf(msgbuf, fmt, arg1, arg2, arg3, arg4, arg5, arg6); \
unsigned int l = level; \
hg_scanner_mgr::ui_default_callback(NULL, SANE_EVENT_WIN_DEBUG_INFO, msgbuf, &l, NULL); \
free(msgbuf); \
}
#define HG_VLOG_MINI_6(level, fmt, arg1, arg2, arg3, arg4, arg5, arg6) \
HG_VLOG_6(level, 256, fmt, arg1, arg2, arg3, arg4, arg5, arg6)
#else
#define HG_LOG hg_log::log
#define HG_VLOG_1(level, bytes, fmt, arg1) \
{ \
char* msgbuf = (char*)malloc(bytes); \
sprintf(msgbuf, fmt, arg1); \
HG_LOG(level, msgbuf); \
free(msgbuf); \
}
#define HG_VLOG_MINI_1(level, fmt, arg1) HG_VLOG_1(level, 256, fmt, arg1)
#define HG_VLOG_2(level, bytes, fmt, arg1, arg2) \
{ \
char* msgbuf = (char*)malloc(bytes); \
sprintf(msgbuf, fmt, arg1, arg2); \
HG_LOG(level, msgbuf); \
free(msgbuf); \
}
#define HG_VLOG_MINI_2(level, fmt, arg1, arg2) HG_VLOG_2(level, 256, fmt, arg1, arg2)
#define HG_VLOG_3(level, bytes, fmt, arg1, arg2, arg3) \
{ \
char* msgbuf = (char*)malloc(bytes); \
sprintf(msgbuf, fmt, arg1, arg2, arg3); \
HG_LOG(level, msgbuf); \
free(msgbuf); \
}
#define HG_VLOG_MINI_3(level, fmt, arg1, arg2, arg3) \
HG_VLOG_3(level, 256, fmt, arg1, arg2, arg3)
#define HG_VLOG_4(level, bytes, fmt, arg1, arg2, arg3, arg4) \
{ \
char* msgbuf = (char*)malloc(bytes); \
sprintf(msgbuf, fmt, arg1, arg2, arg3, arg4); \
HG_LOG(level, msgbuf); \
free(msgbuf); \
}
#define HG_VLOG_MINI_4(level, fmt, arg1, arg2, arg3, arg4) \
HG_VLOG_4(level, 256, fmt, arg1, arg2, arg3, arg4)
#define HG_VLOG_5(level, bytes, fmt, arg1, arg2, arg3, arg4, arg5) \
{ \
char* msgbuf = (char*)malloc(bytes); \
sprintf(msgbuf, fmt, arg1, arg2, arg3, arg4, arg5); \
HG_LOG(level, msgbuf); \
free(msgbuf); \
}
#define HG_VLOG_MINI_5(level, fmt, arg1, arg2, arg3, arg4, arg5) \
HG_VLOG_5(level, 256, fmt, arg1, arg2, arg3, arg4, arg5)
#define HG_VLOG_6(level, bytes, fmt, arg1, arg2, arg3, arg4, arg5, arg6)\
{ \
char* msgbuf = (char*)malloc(bytes); \
sprintf(msgbuf, fmt, arg1, arg2, arg3, arg4, arg5, arg6); \
HG_LOG(level, msgbuf); \
free(msgbuf); \
}
#define HG_VLOG_MINI_6(level, fmt, arg1, arg2, arg3, arg4, arg5, arg6) \
HG_VLOG_6(level, 256, fmt, arg1, arg2, arg3, arg4, arg5, arg6)
#endif