Skip to content

Commit

Permalink
Forward log and log level to custom bh_log callback (#3070)
Browse files Browse the repository at this point in the history
Follow-up on #2907. The log level is needed in the host embedder to
better integrate with the embedder's logger.

Allow the developer to customize his bh_log callback with
`cmake -DWAMR_BH_LOG=<log_callback>`,
and update sample/basic to show the usage.
  • Loading branch information
eloparco authored Jan 24, 2024
1 parent 1505e61 commit 3fcd798
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 3 deletions.
3 changes: 3 additions & 0 deletions build-scripts/config_common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,9 @@ endif ()
if (DEFINED WAMR_BH_VPRINTF)
add_definitions (-DBH_VPRINTF=${WAMR_BH_VPRINTF})
endif ()
if (DEFINED WAMR_BH_LOG)
add_definitions (-DBH_LOG=${WAMR_BH_LOG})
endif ()
if (WAMR_DISABLE_APP_ENTRY EQUAL 1)
message (" WAMR application entry functions excluded")
endif ()
Expand Down
2 changes: 2 additions & 0 deletions core/shared/utils/bh_log.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ bh_log_set_verbose_level(uint32 level)
log_verbose_level = level;
}

#ifndef BH_LOG
void
bh_log(LogLevel log_level, const char *file, int line, const char *fmt, ...)
{
Expand Down Expand Up @@ -56,6 +57,7 @@ bh_log(LogLevel log_level, const char *file, int line, const char *fmt, ...)

os_printf("\n");
}
#endif

static uint32 last_time_ms = 0;
static uint32 total_time_ms = 0;
Expand Down
6 changes: 6 additions & 0 deletions core/shared/utils/bh_log.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,14 @@ typedef enum {
void
bh_log_set_verbose_level(uint32 level);

#ifndef BH_LOG
void
bh_log(LogLevel log_level, const char *file, int line, const char *fmt, ...);
#else
void
BH_LOG(uint32 log_level, const char *file, int line, const char *fmt, ...);
#define bh_log BH_LOG
#endif

#ifdef BH_PLATFORM_NUTTX

Expand Down
12 changes: 11 additions & 1 deletion doc/build_wamr.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,17 @@ Currently we only profile the memory consumption of module, module_instance and
> }
> ```
>
> and then use `cmake -DWAMR_BH_VPRINTF=my_vprintf ..` to pass the callback function, or add `BH_VPRINTF=my_vprintf` macro for the compiler, e.g. add line `add_defintions(-DBH_VPRINTF=my_vprintf)` in CMakeListst.txt.
> and then use `cmake -DWAMR_BH_VPRINTF=my_vprintf ..` to pass the callback function, or add `BH_VPRINTF=my_vprintf` macro for the compiler, e.g. add line `add_defintions(-DBH_VPRINTF=my_vprintf)` in CMakeListst.txt. See [basic sample](../samples/basic/src/main.c) for a usage example.
#### **WAMR_BH_LOG**=<log_callback>, default to disable if not set
> Note: if the log_callback function is provided by the developer, WAMR logs are redirected to such callback. For example:
> ```C
> void my_log(uint32 log_level, const char *file, int line, const char *fmt, ...)
> {
> /* Usage of custom logger */
> }
> ```
> See [basic sample](../samples/basic/src/main.c) for a usage example.
#### **Enable reference types feature**
- **WAMR_BUILD_REF_TYPES**=1/0, default to disable if not set
Expand Down
2 changes: 1 addition & 1 deletion samples/basic/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ echo "#####################build basic project"
cd ${CURR_DIR}
mkdir -p cmake_build
cd cmake_build
cmake .. -DCMAKE_BUILD_TYPE=Debug
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BH_VPRINTF=my_vprintf -DWAMR_BH_LOG=my_log
make -j ${nproc}
if [ $? != 0 ];then
echo "BUILD_FAIL basic exit as $?\n"
Expand Down
28 changes: 27 additions & 1 deletion samples/basic/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,30 @@ get_pow(int x, int y);
int32_t
calculate_native(int32_t n, int32_t func1, int32_t func2);

void
my_log(uint32 log_level, const char *file, int line, const char *fmt, ...)
{
char buf[200];
snprintf(buf, 200,
log_level == WASM_LOG_LEVEL_VERBOSE ? "[WamrLogger - VERBOSE] %s"
: "[WamrLogger] %s",
fmt);

va_list ap;
va_start(ap, fmt);
vprintf(buf, ap);
va_end(ap);
}

int
my_vprintf(const char *format, va_list ap)
{
/* Print in blue */
char buf[200];
snprintf(buf, 200, "\x1b[34m%s\x1b[0m", format);
return vprintf(buf, ap);
}

void
print_usage(void)
{
Expand Down Expand Up @@ -95,6 +119,7 @@ main(int argc, char *argv_main[])
printf("Init runtime environment failed.\n");
return -1;
}
wasm_runtime_set_log_level(WASM_LOG_LEVEL_VERBOSE);

buffer = bh_read_file_to_buffer(wasm_path, &buf_size);

Expand All @@ -103,7 +128,8 @@ main(int argc, char *argv_main[])
goto fail;
}

module = wasm_runtime_load(buffer, buf_size, error_buf, sizeof(error_buf));
module = wasm_runtime_load((uint8 *)buffer, buf_size, error_buf,
sizeof(error_buf));
if (!module) {
printf("Load wasm module failed. error: %s\n", error_buf);
goto fail;
Expand Down

0 comments on commit 3fcd798

Please sign in to comment.