tx-gxx-linux/pc/code_twain/sln/sdk/include/log/log.h

76 lines
2.8 KiB
C++

// log.h : log utility
//
// Author: Gongbing
//
// Create: 2019-08-07
#pragma once
#ifndef _INCLUDED_REF_
#define _INCLUDED_REF_
#include "../ref/ref.h"
#endif
//////////////////////////////////////////////////////////////////////////////////////////
// level
enum _log_level
{
LOG_LEVEL_ALL = 1,
LOG_LEVEL_PART,
LOG_LEVEL_IMPORTANT,
LOG_LEVEL_VERY_IMPORTANT,
LOG_LEVEL_NONE = INT_MAX,
};
enum _log_type
{
LOG_TYPE_NONE,
LOG_TYPE_CONSOLE_OUT,
LOG_TYPE_OUTPUTDBG,
LOG_TYPE_WRITE_FILE,
LOG_TYPE_USER_CUSTOM,
};
//////////////////////////////////////////////////////////////////////////////////////////
// macros
#ifndef UNICODE_STR
#define _TO_UNICODE(str) L##str
#define UNICODE_STR(str) _TO_UNICODE(str)
#define MAKE_UNICODE(str) UNICODE_STR(str)
#endif
#define LOG_API_PROTO(name) void(__stdcall *name)(const wchar_t* info, size_t words, void* user)
#define LOG_API_INSTANCE(name) void __stdcall name(const wchar_t* info, size_t words, void* user)
namespace log_util
{
//////////////////////////////////////////////////////////////////////////////////////////
// log interface
typedef LOG_API_PROTO(real_log);
__declspec(novtable) struct ILog : public ref_util::IRef
{
// param0: (const wchar_t*)path file when type is LOG_TYPE_WRITE_FILE, real_log when type is LOG_TYPE_USER_CUSTOM. otherwise always be ZERO
// param1: for parameter 'user' of real_log when type is LOG_TYPE_USER_CUSTOM, otherwise always be ZERO
COM_API_DECLARE(int, set_log_level(_log_level level));
COM_API_DECLARE(int, set_log_type(_log_type type, void* param0 = NULL, void* param1 = NULL)); // return type after this oper
COM_API_DECLARE(void, write_log(const wchar_t* info, size_t bytes, _log_level level));
COM_API_DECLARE(bool, is_level_enabled(_log_level level)); // whether the message of level can be logged
COM_API_DECLARE(void, set_prefix(const wchar_t* pref)); // default is without prefix
COM_API_DECLARE(void, enable_time_stamp(bool enable)); // default is without timestamp
};
// use inner log_util
// param0: (const wchar_t*)path file when type is LOG_TYPE_WRITE_FILE, real_log when type is LOG_TYPE_USER_CUSTOM. otherwise always be ZERO
// param1: for parameter 'user' of real_log when type is LOG_TYPE_USER_CUSTOM, otherwise always be ZERO
PORT_API(ILog*) start_log(_log_type type = LOG_TYPE_OUTPUTDBG, _log_level level = LOG_LEVEL_ALL, void* param0 = NULL, void* param1 = NULL);
PORT_API(ILog*) get_cur_log_util(void);
// set an external log_util, NULL to stop current log, will invoke log->add_ref() if log is valid
PORT_API(void) set_log_util(ILog* log);
// invoke log
PORT_API(bool) is_logging_enable(_log_level level);
PORT_API_CALL(void, __cdecl) log(_log_level level, size_t estimate_bytes, const wchar_t* format, ...);
PORT_API_CALL(void, __cdecl) log(_log_level level, size_t estimate_bytes, const char* format, ...);
}