76 lines
2.8 KiB
C
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, ...);
|
||
|
}
|