From d5f84d00162419b0ec8c49b4d3ddc35dca54f92f Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 12 Jun 2025 02:19:59 +0200 Subject: [PATCH] Logging: Revamp default behavior and command line arguments * Modify --log-level to accept error/warning/info/debug string values * Add --log-show-source, now hidden by default * Remove --log-show-basename, path is now on own line * Add --log-show-memory * Remove --log-show-timestamp, now always shown Pull Request: https://projects.blender.org/blender/blender/pulls/140244 --- source/creator/creator.cc | 4 ++ source/creator/creator_args.cc | 75 ++++++++++++++++++++++------------ 2 files changed, 54 insertions(+), 25 deletions(-) diff --git a/source/creator/creator.cc b/source/creator/creator.cc index da9e250c0ee..9850b2c91b9 100644 --- a/source/creator/creator.cc +++ b/source/creator/creator.cc @@ -386,6 +386,10 @@ int main(int argc, /* Initialize logging. */ CLG_init(); + CLG_output_use_timestamp_set(true); + CLG_output_use_memory_set(false); + CLG_output_use_source_set(false); + CLG_output_use_basename_set(false); CLG_fatal_fn_set(callback_clg_fatal); C = CTX_create(); diff --git a/source/creator/creator_args.cc b/source/creator/creator_args.cc index feaa8fc0ce1..89af7c7491f 100644 --- a/source/creator/creator_args.cc +++ b/source/creator/creator_args.cc @@ -718,9 +718,9 @@ static void print_help(bArgs *ba, bool all) PRINT("Logging Options:\n"); BLI_args_print_arg_doc(ba, "--log"); BLI_args_print_arg_doc(ba, "--log-level"); - BLI_args_print_arg_doc(ba, "--log-show-basename"); + BLI_args_print_arg_doc(ba, "--log-show-memory"); + BLI_args_print_arg_doc(ba, "--log-show-source"); BLI_args_print_arg_doc(ba, "--log-show-backtrace"); - BLI_args_print_arg_doc(ba, "--log-show-timestamp"); BLI_args_print_arg_doc(ba, "--log-file"); PRINT("\n"); @@ -1150,34 +1150,60 @@ static int arg_handle_disable_liboverride_auto_resync(int /*argc*/, static const char arg_handle_log_level_set_doc[] = "\n" - "\tSet the logging verbosity level (higher for more details) defaults to 1,\n" - "\tuse -1 to log all levels."; + "\tSet the logging verbosity level.\n" + "\n" + "\tfatal: Fatal errors only\n" + "\terror: Errors only\n" + "\twarning: Warnings and errors\n" + "\tinfo: General information, warnings and errors\n" + "\tdebug: Verbose messages for developers"; static int arg_handle_log_level_set(int argc, const char **argv, void * /*data*/) { const char *arg_id = "--log-level"; if (argc > 1) { const char *err_msg = nullptr; - if (!parse_int_clamp(argv[1], nullptr, -1, INT_MAX, &G.log.level, &err_msg)) { - fprintf(stderr, "\nError: %s '%s %s'.\n", err_msg, arg_id, argv[1]); + + if (STRCASEEQ(argv[1], "fatal")) { + /* TODO */ + G.log.level = 1; } - else { + else if (STRCASEEQ(argv[1], "error")) { + /* TODO */ + G.log.level = 1; + } + else if (STRCASEEQ(argv[1], "warning")) { + /* TODO */ + G.log.level = 1; + } + else if (STRCASEEQ(argv[1], "info")) { + G.log.level = 1; + } + else if (STRCASEEQ(argv[1], "debug")) { + G.log.level = 5; + } + else if (parse_int_clamp(argv[1], nullptr, -1, INT_MAX, &G.log.level, &err_msg)) { if (G.log.level == -1) { G.log.level = INT_MAX; } - CLG_level_set(G.log.level); } + else { + fprintf(stderr, "\nError: %s '%s %s'.\n", err_msg, arg_id, argv[1]); + return 1; + } + + CLG_level_set(G.log.level); return 1; } fprintf(stderr, "\nError: '%s' no args given.\n", arg_id); return 0; } -static const char arg_handle_log_show_basename_set_doc[] = +static const char arg_handle_log_show_source_set_doc[] = "\n\t" - "Only show file name in output (not the leading path)."; -static int arg_handle_log_show_basename_set(int /*argc*/, const char ** /*argv*/, void * /*data*/) + "Show source file and function name in output."; +static int arg_handle_log_show_source_set(int /*argc*/, const char ** /*argv*/, void * /*data*/) { - CLG_output_use_basename_set(true); + CLG_output_use_source_set(true); return 0; } @@ -1192,12 +1218,12 @@ static int arg_handle_log_show_backtrace_set(int /*argc*/, const char ** /*argv* return 0; } -static const char arg_handle_log_show_timestamp_set_doc[] = +static const char arg_handle_log_show_memory_set_doc[] = "\n\t" - "Show a timestamp for each log message in seconds since start."; -static int arg_handle_log_show_timestamp_set(int /*argc*/, const char ** /*argv*/, void * /*data*/) + "Show memory usage for each log message."; +static int arg_handle_log_show_memory_set(int /*argc*/, const char ** /*argv*/, void * /*data*/) { - CLG_output_use_timestamp_set(true); + CLG_output_use_memory_set(true); return 0; } @@ -1230,13 +1256,12 @@ static int arg_handle_log_file_set(int argc, const char **argv, void * /*data*/) static const char arg_handle_log_set_doc[] = "\n" "\tEnable logging categories, taking a single comma separated argument.\n" - "\tMultiple categories can be matched using a '.*' suffix,\n" - "\tso '--log \"wm.*\"' logs every kind of window-manager message.\n" - "\tSub-string can be matched using a '*' prefix and suffix,\n" - "\tso '--log \"*undo*\"' logs every kind of undo-related message.\n" - "\tUse \"^\" prefix to ignore, so '--log \"*,^wm.operator.*\"' logs all except for " - "'wm.operators.*'\n" - "\tUse \"*\" to log everything."; + "\n" + "\t--log \"*\": log everything\n" + "\t--log \"event\": logs every category starting with \"event\"\n" + "\t--log \"render,cycles\": log both render and cycles messages\n" + "\t--log \"*mesh*\": log every category containing \"mesh\" substring\n" + "\t--log \"*,^operator\": log everything except operators, with ^prefix to exclude"; static int arg_handle_log_set(int argc, const char **argv, void * /*data*/) { const char *arg_id = "--log"; @@ -2681,9 +2706,9 @@ void main_args_setup(bContext *C, bArgs *ba, bool all) * especially `bpy.appdir` since it's useful to show errors finding paths on startup. */ BLI_args_add(ba, nullptr, "--log", CB(arg_handle_log_set), ba); BLI_args_add(ba, nullptr, "--log-level", CB(arg_handle_log_level_set), ba); - BLI_args_add(ba, nullptr, "--log-show-basename", CB(arg_handle_log_show_basename_set), ba); + BLI_args_add(ba, nullptr, "--log-show-source", CB(arg_handle_log_show_source_set), ba); BLI_args_add(ba, nullptr, "--log-show-backtrace", CB(arg_handle_log_show_backtrace_set), ba); - BLI_args_add(ba, nullptr, "--log-show-timestamp", CB(arg_handle_log_show_timestamp_set), ba); + BLI_args_add(ba, nullptr, "--log-show-memory", CB(arg_handle_log_show_memory_set), ba); BLI_args_add(ba, nullptr, "--log-file", CB(arg_handle_log_file_set), ba); /* GPU backend selection should be part of #ARG_PASS_ENVIRONMENT for correct GPU context