29 #include YFM_YCLib_Debug
30 #include YFM_YCLib_Input
31 #include YFM_YCLib_Video // for platform::ColorSpace;
35 # include <android/log.h>
44 static bool bDebugStatus(
true);
49 template<
typename... _tParams>
55 return ::__android_log_print(platform_ex::MapAndroidLogLevel(lv), tag, fmt,
114 t = std::vprintf(str, list);
123 Logger::SetFilter(Filter
f)
138 return lv <= logger.FilterLevel;
145 std::fprintf(stderr,
"[%#X]: %s\n",
unsigned(lv), str);
153 #if YF_Multithread == 1
154 std::lock_guard<std::recursive_mutex> lck(record_mtx);
157 sender(level, *
this, str);
162 Logger::DoLogException(Level level,
const std::exception& e)
ynothrow
169 catch(std::exception& e)
174 "Another exception thrown when handling exception.");
180 __FILE__, __LINE__,
"Logging error: unhandled exception#1.");
188 "Another unknown exception thrown when handling exception.");
193 __FILE__, __LINE__,
"Logging error: unhandled exception#2.");
202 return platform_ex::AndroidLogSender(tag);
215 static std::mutex mtx;
216 std::lock_guard<std::mutex> lck(mtx);
236 return ystdex::sfmt(
"\"%s\":%i:\n", file, line) + std::move(str);
241 using namespace platform;
243 namespace platform_ex
248 LogAssert(
bool expr,
const char* expr_str,
const char* file,
int line,
252 ::__android_log_assert(expr_str,
"YFramework",
253 "Assertion failed @ \"%s\":%i:\n %s .\nMessage: \n%s\n", file, line,
262 : ANDROID_LOG_FATAL - (std::uint8_t(lv) - 0x40) / 0x20;
266 AndroidLogSender::AndroidLogSender(
const std::string& t)
269 AndroidLogSender::~AndroidLogSender()
273 AndroidLogSender::operator()(Level lv,
Logger& logger,
const char* str)
const
275 Logger::DefaultSendLog(lv, logger, str);
277 ::__android_log_assert(
"",
"YFramework",
"[%#X]: %s\n",
280 PrintAndroidLog(lv, tag.c_str(),
"[%#X]: %s\n", unsigned(lv), str);
#define ynothrowv
YSLib 无异常抛出保证验证:有条件地使用无异常抛出规范。
#define yunused(...)
标记未使用的表达式。
yconstfn const string _tParams && args
YF_API void YDebugBegin()
调试模式:显示控制台。
void SetWriter(Sender)
设置发送器。
static Sender FetchDefaultSender(const std::string &="YFramework")
取新建的平台相关的默认发送:按指定的标签取平台相关实现。
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
void ytrace(std::FILE *, std::uint8_t, std::uint8_t, const char *, int, const char *,...)
YCLib 调试跟踪函数。
YF_API void YDebugSetStatus(bool=true)
调试模式:设置状态。
std::size_t size ynothrow
std::basic_string< _tChar > vsfmt(const _tChar *fmt, std::va_list args)
以 C 标准输出格式的输出 std::basic_string 实例的对象。
#define YB_UNLIKELY(expr)
分支预测提示。
YF_API void WaitForInput()
等待任意按键。
std::string LogWithSource(const char *file, int line, const char *fmt,...)
yconstfn const string & name
void DoLog(Level, const char *)
转发等级和日志至发送器。
static bool DefaultFilter(Level, Logger &) ynothrow
默认过滤:仅允许等级不大于阈值的日志被记录。
GSStringTemplate< char >::basic_string string
YF_API void YConsoleInit(std::uint8_t dspIndex, Color fc=ColorSpace::White, Color bc=ColorSpace::Black)
启动控制台。
YF_API Logger & FetchCommonLogger()
取公共日志记录器。
#define YAssertNonnull(_expr)
YF_API bool YDebugGetStatus()
调试模式:取得状态。
YF_API int yprintf(const char *,...)
调试模式 printf :显示控制台格式化输出 ,按键继续。
static void DefaultSendLog(Level, Logger &, const char *) ynothrowv
默认发送器:使用 stderr 输出。
std::basic_string< _tChar > sfmt(const _tChar *fmt,...)
以 C 标准输出格式的输出 std::basic_string 实例的对象。
YF_API void YDebug()
调试模式:按键继续。
std::function< void(Level, Logger &, const char *)> Sender