73 lines
2.8 KiB
C
73 lines
2.8 KiB
C
|
#pragma once
|
||
|
|
||
|
#include<hgl/platform/Platform.h>
|
||
|
#include<hgl/type/String.h>
|
||
|
#include<hgl/SourceCodeLocation.h>
|
||
|
#include<hgl/log/LogInfo.h>
|
||
|
#include<cstdio>
|
||
|
#include<cwchar>
|
||
|
#include<cstdarg>
|
||
|
|
||
|
namespace hgl
|
||
|
{
|
||
|
constexpr const size_t LOG_TMP_BUFFER_SIZE=4096;
|
||
|
|
||
|
/**
|
||
|
* Android风格的日志输出类
|
||
|
*/
|
||
|
class LogOutput
|
||
|
{
|
||
|
char tmp_fmt [LOG_TMP_BUFFER_SIZE];
|
||
|
u8char tmp_fmt_u8 [LOG_TMP_BUFFER_SIZE];
|
||
|
u16char tmp_fmt_u16 [LOG_TMP_BUFFER_SIZE];
|
||
|
|
||
|
public:
|
||
|
|
||
|
LogOutput()=default;
|
||
|
virtual ~LogOutput()=default;
|
||
|
|
||
|
public:
|
||
|
|
||
|
void output(LogLevel level,const char * str,const int len){logger::Log(level,(u8char *)str,len);}
|
||
|
void output(LogLevel level,const u8char * str,const int len){logger::Log(level,(u8char *)str,len);}
|
||
|
void output(LogLevel level,const u16char * str,const int len){logger::Log(level,(u16char *)str,len);}
|
||
|
|
||
|
#define DEFINE_LOG_OUTPUT_CHAR(ch,level) \
|
||
|
\
|
||
|
void ch(const char * str,const int len ){output(LogLevel::level, str,len);} \
|
||
|
void ch(const char * str ){ch(str,strlen(str));} \
|
||
|
void ch(const AnsiString & str ){ch(str.c_str(),str.GetLength());} \
|
||
|
void ch(const AnsiStringView & sv ){ch(sv.c_str(),sv.GetLength());}
|
||
|
|
||
|
#define DEFINE_LOG_OUTPUT_CHAR8(ch,level) \
|
||
|
\
|
||
|
void ch(const u8char * str,const int len ){output(LogLevel::level, str,len);} \
|
||
|
void ch(const u8char * str ){ch(str,strlen(str));} \
|
||
|
void ch(const U8String & str ){ch(str.c_str(),str.GetLength());} \
|
||
|
void ch(const U8StringView &sv ){ch(sv.c_str(),sv.GetLength());}
|
||
|
|
||
|
#define DEFINE_LOG_OUTPUT_CHAR16(ch,level) \
|
||
|
\
|
||
|
void ch(const u16char * str,const int len ){output(LogLevel::level, str,len);} \
|
||
|
void ch(const u16char * str ){ch(str,strlen(str));} \
|
||
|
void ch(const U16String & str ){ch(str.c_str(),str.GetLength());} \
|
||
|
void ch(const U16StringView &sv ){ch(sv.c_str(),sv.GetLength());}
|
||
|
|
||
|
#ifdef HGL_SUPPORT_CHAR8_T
|
||
|
#define DEFINE_LOG_OUTPUT(ch,level) DEFINE_LOG_OUTPUT_CHAR(ch,level) \
|
||
|
DEFINE_LOG_OUTPUT_CHAR8(ch,level) \
|
||
|
DEFINE_LOG_OUTPUT_CHAR16(ch,level)
|
||
|
#else
|
||
|
#define DEFINE_LOG_OUTPUT(ch,level) DEFINE_LOG_OUTPUT_CHAR(ch,level) \
|
||
|
DEFINE_LOG_OUTPUT_CHAR16(ch,level)
|
||
|
#endif//HGL_SUPPORT_CHAR8_T
|
||
|
|
||
|
DEFINE_LOG_OUTPUT(v,Verbose)
|
||
|
DEFINE_LOG_OUTPUT(i,Info)
|
||
|
DEFINE_LOG_OUTPUT(h,Hint)
|
||
|
DEFINE_LOG_OUTPUT(w,Warning)
|
||
|
DEFINE_LOG_OUTPUT(e,Error)
|
||
|
DEFINE_LOG_OUTPUT(fe,FatalError)
|
||
|
};//class LogOutput
|
||
|
}//namespace hgl
|