log: refine log function for Android

This commit is contained in:
zhou.weiguo 2024-04-17 17:12:40 +08:00
parent facb8b56f8
commit 9f844a3d0c
No known key found for this signature in database
GPG key ID: D0FCFC6811D1C8BF

View file

@ -94,6 +94,9 @@
#pragma warning(disable: 4244 4267) // possible loss of data #pragma warning(disable: 4244 4267) // possible loss of data
#endif #endif
#if (defined __ANDROID__) || (defined ANDROID)
#define LLAMA_ATTRIBUTE_FORMAT(...)
#else
#ifdef __GNUC__ #ifdef __GNUC__
#ifdef __MINGW32__ #ifdef __MINGW32__
#define LLAMA_ATTRIBUTE_FORMAT(...) __attribute__((format(gnu_printf, __VA_ARGS__))) #define LLAMA_ATTRIBUTE_FORMAT(...) __attribute__((format(gnu_printf, __VA_ARGS__)))
@ -103,6 +106,7 @@
#else #else
#define LLAMA_ATTRIBUTE_FORMAT(...) #define LLAMA_ATTRIBUTE_FORMAT(...)
#endif #endif
#endif
#define LLAMA_MAX_NODES 8192 #define LLAMA_MAX_NODES 8192
#define LLAMA_MAX_EXPERTS 60 #define LLAMA_MAX_EXPERTS 60
@ -111,14 +115,18 @@
// //
// logging // logging
// //
#if (defined __ANDROID__) || (defined ANDROID)
extern "C" int __android_log_print(int prio, const char * tag, const char * fmt, ...)
__attribute__((__format__(printf, 3, 4)));
#endif
LLAMA_ATTRIBUTE_FORMAT(2, 3) LLAMA_ATTRIBUTE_FORMAT(5, 6)
static void llama_log_internal (ggml_log_level level, const char* format, ...); static void llama_log_internal (ggml_log_level level, const char * file, const char * func, int line, const char * format, ...);
static void llama_log_callback_default(ggml_log_level level, const char * text, void * user_data); static void llama_log_callback_default(ggml_log_level level, const char * text, void * user_data);
#define LLAMA_LOG_INFO(...) llama_log_internal(GGML_LOG_LEVEL_INFO , __VA_ARGS__) #define LLAMA_LOG_INFO(...) llama_log_internal(GGML_LOG_LEVEL_INFO , __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
#define LLAMA_LOG_WARN(...) llama_log_internal(GGML_LOG_LEVEL_WARN , __VA_ARGS__) #define LLAMA_LOG_WARN(...) llama_log_internal(GGML_LOG_LEVEL_WARN , __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
#define LLAMA_LOG_ERROR(...) llama_log_internal(GGML_LOG_LEVEL_ERROR, __VA_ARGS__) #define LLAMA_LOG_ERROR(...) llama_log_internal(GGML_LOG_LEVEL_ERROR, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
// //
// helpers // helpers
@ -17136,12 +17144,16 @@ void llama_log_set(ggml_log_callback log_callback, void * user_data) {
#endif #endif
} }
static void llama_log_internal_v(ggml_log_level level, const char * format, va_list args) { static void llama_log_internal_v(ggml_log_level level, const char * file, const char * func, int line, const char * format, va_list args) {
va_list args_copy; va_list args_copy;
va_copy(args_copy, args); va_copy(args_copy, args);
char buffer[128]; char buffer[1024];
int len = vsnprintf(buffer, 128, format, args); int len_prefix = snprintf(buffer, 1024, "[%s, %d]: ", func, line); // param file not used in this file
if (len < 128) { int len = vsnprintf(buffer + len_prefix, 1024 - len, format, args);
if (len < (1024 - len_prefix)) {
#if (defined __ANDROID__) || (defined ANDROID)
__android_log_print(level, "llama.cpp", "%s", buffer);
#endif
g_state.log_callback(level, buffer, g_state.log_callback_user_data); g_state.log_callback(level, buffer, g_state.log_callback_user_data);
} else { } else {
char* buffer2 = new char[len+1]; char* buffer2 = new char[len+1];