diff --git a/intern/clog/CLG_log.h b/intern/clog/CLG_log.h index 5ccfeebde17..a89ba362f96 100644 --- a/intern/clog/CLG_log.h +++ b/intern/clog/CLG_log.h @@ -135,6 +135,13 @@ void CLG_logref_init(CLG_LogRef *clg_ref); int CLG_color_support_get(CLG_LogRef *clg_ref); +/* When true, quiet any NOCHECK logs that would otherwise be printed regardless of log filters + * and levels. This is used so command line tools can control output without unnecessary noise. + * + * Note this does not silence log filters and levels that have been explicitly enabled. */ +void CLG_quiet_set(bool quiet); +bool CLG_quiet_get(); + /** Declare outside function, declare as extern in header. */ #define CLG_LOGREF_DECLARE_GLOBAL(var, id) \ static CLG_LogRef _static_##var = {id}; \ @@ -159,7 +166,9 @@ int CLG_color_support_get(CLG_LogRef *clg_ref); #define CLOG_AT_LEVEL_NOCHECK(clg_ref, verbose_level, ...) \ { \ const CLG_LogType *_lg_ty = CLOG_ENSURE(clg_ref); \ - CLG_logf(_lg_ty, verbose_level, __FILE__ ":" STRINGIFY(__LINE__), __func__, __VA_ARGS__); \ + if (!CLG_quiet_get() || _lg_ty->level >= verbose_level) { \ + CLG_logf(_lg_ty, verbose_level, __FILE__ ":" STRINGIFY(__LINE__), __func__, __VA_ARGS__); \ + } \ } \ ((void)0) @@ -175,10 +184,13 @@ int CLG_color_support_get(CLG_LogRef *clg_ref); #define CLOG_STR_AT_LEVEL_NOCHECK(clg_ref, verbose_level, str) \ { \ const CLG_LogType *_lg_ty = CLOG_ENSURE(clg_ref); \ - CLG_log_str(_lg_ty, verbose_level, __FILE__ ":" STRINGIFY(__LINE__), __func__, str); \ + if (!CLG_quiet_get() || _lg_ty->level >= verbose_level) { \ + CLG_log_str(_lg_ty, verbose_level, __FILE__ ":" STRINGIFY(__LINE__), __func__, str); \ + } \ } \ ((void)0) +/* Log with format string. */ #define CLOG_FATAL(clg_ref, ...) CLOG_AT_LEVEL(clg_ref, CLG_LEVEL_FATAL, __VA_ARGS__) #define CLOG_ERROR(clg_ref, ...) CLOG_AT_LEVEL(clg_ref, CLG_LEVEL_ERROR, __VA_ARGS__) #define CLOG_WARN(clg_ref, ...) CLOG_AT_LEVEL(clg_ref, CLG_LEVEL_WARN, __VA_ARGS__) @@ -186,6 +198,7 @@ int CLG_color_support_get(CLG_LogRef *clg_ref); #define CLOG_DEBUG(clg_ref, ...) CLOG_AT_LEVEL(clg_ref, CLG_LEVEL_DEBUG, __VA_ARGS__) #define CLOG_TRACE(clg_ref, ...) CLOG_AT_LEVEL(clg_ref, CLG_LEVEL_TRACE, __VA_ARGS__) +/* Log single string. */ #define CLOG_STR_FATAL(clg_ref, str) CLOG_STR_AT_LEVEL(clg_ref, CLG_LEVEL_FATAL, str) #define CLOG_STR_ERROR(clg_ref, str) CLOG_STR_AT_LEVEL(clg_ref, CLG_LEVEL_ERROR, str) #define CLOG_STR_WARN(clg_ref, str) CLOG_STR_AT_LEVEL(clg_ref, CLG_LEVEL_WARN, str) @@ -193,6 +206,8 @@ int CLG_color_support_get(CLG_LogRef *clg_ref); #define CLOG_STR_DEBUG(clg_ref, str) CLOG_STR_AT_LEVEL(clg_ref, CLG_LEVEL_DEBUG, str) #define CLOG_STR_TRACE(clg_ref, str) CLOG_STR_AT_LEVEL(clg_ref, CLG_LEVEL_TRACE, str) +/* Log regardless of filters and levels, for a few important messages like blend save and load. + * Only #CLG_quiet_set will silence these. */ #define CLOG_INFO_NOCHECK(clg_ref, format, ...) \ CLOG_AT_LEVEL_NOCHECK(clg_ref, CLG_LEVEL_INFO, format, __VA_ARGS__) #define CLOG_STR_INFO_NOCHECK(clg_ref, str) CLOG_STR_AT_LEVEL_NOCHECK(clg_ref, CLG_LEVEL_INFO, str) diff --git a/intern/clog/clog.cc b/intern/clog/clog.cc index 074160bd2e7..a4328f8340f 100644 --- a/intern/clog/clog.cc +++ b/intern/clog/clog.cc @@ -856,6 +856,8 @@ static void CLG_ctx_free(CLogContext *ctx) /* We could support multiple at once, for now this seems not needed. */ static struct CLogContext *g_ctx = nullptr; +/* Separate to preserve this after freeing context. */ +static bool g_quiet = false; void CLG_init() { @@ -924,6 +926,16 @@ void CLG_level_set(CLG_Level level) CLG_ctx_level_set(g_ctx, level); } +void CLG_quiet_set(bool quiet) +{ + g_quiet = quiet; +} + +bool CLG_quiet_get() +{ + return g_quiet; +} + /** \} */ /* -------------------------------------------------------------------- */ diff --git a/source/blender/blenkernel/BKE_global.hh b/source/blender/blenkernel/BKE_global.hh index 48929485aea..94643bc74a4 100644 --- a/source/blender/blenkernel/BKE_global.hh +++ b/source/blender/blenkernel/BKE_global.hh @@ -70,14 +70,6 @@ struct Global { */ bool background; - /** - * When true, suppress any non-error print messages such as files saves, loaded, quitting etc. - * This is used so command line tools can control output without unnecessary noise. - * - * \note This should only be used to suppress printing (not reports or other kinds of logging). - */ - bool quiet; - /** * Skip reading the startup file and user preferences. * Also disable saving the preferences on exit (see #G_FLAG_USERPREF_NO_SAVE_ON_EXIT), diff --git a/source/blender/blenkernel/intern/blendfile.cc b/source/blender/blenkernel/intern/blendfile.cc index d3296aadd10..9a8e451b419 100644 --- a/source/blender/blenkernel/intern/blendfile.cc +++ b/source/blender/blenkernel/intern/blendfile.cc @@ -1355,9 +1355,7 @@ BlendFileData *BKE_blendfile_read(const char *filepath, { /* Don't print startup file loading. */ if (params->is_startup == false) { - if (!G.quiet) { - CLOG_INFO_NOCHECK(&LOG_BLEND, "Read blend: \"%s\"", filepath); - } + CLOG_INFO_NOCHECK(&LOG_BLEND, "Read blend: \"%s\"", filepath); } BlendFileData *bfd = BLO_read_from_file(filepath, eBLOReadSkip(params->skip_flags), reports); @@ -1636,9 +1634,7 @@ bool BKE_blendfile_userdef_write_all(ReportList *reports) if (cfgdir) { bool ok_write; BLI_path_join(filepath, sizeof(filepath), cfgdir->c_str(), BLENDER_USERPREF_FILE); - if (!G.quiet) { - printf("Writing userprefs: \"%s\" ", filepath); - } + CLOG_INFO_NOCHECK(&LOG_BLEND, "Writing user preferences: \"%s\" ", filepath); if (use_template_userpref) { ok_write = BKE_blendfile_userdef_write_app_template(filepath, reports); } @@ -1647,15 +1643,10 @@ bool BKE_blendfile_userdef_write_all(ReportList *reports) } if (ok_write) { - if (!G.quiet) { - printf("ok\n"); - } BKE_report(reports, RPT_INFO, "Preferences saved"); } else { - if (!G.quiet) { - printf("fail\n"); - } + CLOG_WARN(&LOG_BLEND, "Failed to write user preferences"); ok = false; BKE_report(reports, RPT_ERROR, "Saving preferences failed"); } @@ -1670,18 +1661,11 @@ bool BKE_blendfile_userdef_write_all(ReportList *reports) /* Also save app-template preferences. */ BLI_path_join(filepath, sizeof(filepath), cfgdir->c_str(), BLENDER_USERPREF_FILE); - if (!G.quiet) { - printf("Writing userprefs app-template: \"%s\" ", filepath); - } + CLOG_INFO_NOCHECK(&LOG_BLEND, "Writing user preferences app-template: \"%s\" ", filepath); if (BKE_blendfile_userdef_write(filepath, reports) != 0) { - if (!G.quiet) { - printf("ok\n"); - } } else { - if (!G.quiet) { - printf("fail\n"); - } + CLOG_WARN(&LOG_BLEND, "Failed to write user preferences"); ok = false; } } diff --git a/source/blender/blenkernel/intern/image_save.cc b/source/blender/blenkernel/intern/image_save.cc index c9685cfa6fb..03864e70941 100644 --- a/source/blender/blenkernel/intern/image_save.cc +++ b/source/blender/blenkernel/intern/image_save.cc @@ -1042,9 +1042,7 @@ static void image_render_print_save_message(ReportList *reports, { if (ok) { /* no need to report, just some helpful console info */ - if (!G.quiet) { - CLOG_INFO(&LOG_RENDER, "Saved: '%s'", filepath); - } + CLOG_INFO_NOCHECK(&LOG_RENDER, "Saved: '%s'", filepath); } else { /* report on error since users will want to know what failed */ diff --git a/source/blender/imbuf/CMakeLists.txt b/source/blender/imbuf/CMakeLists.txt index a268adb904f..889dae26faa 100644 --- a/source/blender/imbuf/CMakeLists.txt +++ b/source/blender/imbuf/CMakeLists.txt @@ -77,6 +77,7 @@ set(LIB PRIVATE bf::gpu bf_imbuf_openimageio PRIVATE bf::intern::atomic + PRIVATE bf::intern::clog PRIVATE bf::intern::guardedalloc bf_intern_memutil PRIVATE bf::imbuf::opencolorio diff --git a/source/blender/imbuf/intern/colormanagement.cc b/source/blender/imbuf/intern/colormanagement.cc index fcedb627d96..1981be6e8bd 100644 --- a/source/blender/imbuf/intern/colormanagement.cc +++ b/source/blender/imbuf/intern/colormanagement.cc @@ -54,8 +54,12 @@ #include "SEQ_iterator.hh" +#include "CLG_log.h" + #include "OCIO_api.hh" +static CLG_LogRef LOG = {"image.color_management"}; + using blender::float3; using blender::float3x3; using blender::StringRefNull; @@ -492,8 +496,8 @@ static bool colormanage_role_color_space_name_get(ocio::Config &config, } if (ociocs == nullptr) { - if (!optional && !G.quiet) { - printf("Color management: Error, could not find role \"%s\"\n", role); + if (!optional) { + CLOG_ERROR(&LOG, "Could not find role \"%s\"", role); } colorspace_name[0] = '\0'; return false; @@ -527,16 +531,12 @@ static bool colormanage_load_config(ocio::Config &config) config, global_role_aces_interchange, OCIO_ROLE_ACES_INTERCHANGE, nullptr, true); if (g_config->get_num_displays() == 0) { - if (!G.quiet) { - printf("Color management: Error, could not find any displays\n"); - } + CLOG_ERROR(&LOG, "Could not find any displays"); ok = false; } /* NOTE: The look "None" is expected to be hard-coded to exist in the OpenColorIO integration. */ if (g_config->get_num_looks() == 0) { - if (!G.quiet) { - printf("Color management: Error, could not find any looks\n"); - } + CLOG_ERROR(&LOG, "Could not find any looks"); ok = false; } @@ -544,10 +544,7 @@ static bool colormanage_load_config(ocio::Config &config) const ocio::Display *display = g_config->get_display_by_index(display_index); const int num_views = display->get_num_views(); if (num_views <= 0) { - if (!G.quiet) { - printf("Color management: Error, could not find any views for display %s\n", - display->name().c_str()); - } + CLOG_ERROR(&LOG, "Could not find any views for display %s", display->name().c_str()); ok = false; break; } @@ -588,15 +585,11 @@ void colormanagement_init() if (ocio_env && ocio_env[0] != '\0') { g_config = ocio::Config::create_from_environment(); if (g_config != nullptr) { - if (!G.quiet) { - printf("Color management: Using %s as a configuration file\n", ocio_env); - } + CLOG_INFO_NOCHECK(&LOG, "Using %s as a configuration file", ocio_env); const bool ok = colormanage_load_config(*g_config); if (!ok) { - if (!G.quiet) { - printf("Color management: Failed to load config from environment\n"); - } + CLOG_ERROR(&LOG, "Failed to load config from environment"); colormanage_free_config(); } } @@ -616,9 +609,7 @@ void colormanagement_init() const bool ok = colormanage_load_config(*g_config); if (!ok) { - if (!G.quiet) { - printf("Color management: Failed to load bundled config\n"); - } + CLOG_ERROR(&LOG, "Failed to load bundled config"); colormanage_free_config(); } } @@ -627,9 +618,7 @@ void colormanagement_init() /* Then use fallback. */ if (g_config == nullptr) { - if (!G.quiet) { - printf("Color management: Using fallback mode for management\n"); - } + CLOG_STR_INFO_NOCHECK(&LOG, "Using fallback mode for management"); g_config = ocio::Config::create_fallback(); colormanage_load_config(*g_config); } @@ -878,14 +867,11 @@ static void colormanage_check_display_settings(ColorManagedDisplaySettings *disp const ocio::Display *display = g_config->get_display_by_name(display_settings->display_device); if (!display) { - if (!G.quiet) { - printf( - "Color management: display \"%s\" used by %s not found, setting to default " - "(\"%s\").\n", - display_settings->display_device, - what, - default_display->name().c_str()); - } + CLOG_WARN(&LOG, + "Display \"%s\" used by %s not found, setting to default (\"%s\").", + display_settings->display_device, + what, + default_display->name().c_str()); STRNCPY_UTF8(display_settings->display_device, default_display->name().c_str()); } @@ -913,12 +899,11 @@ static void colormanage_check_view_settings(ColorManagedDisplaySettings *display if (!view) { const ocio::View *default_view = display->get_default_view(); if (default_view) { - if (!G.quiet) { - printf("Color management: %s view \"%s\" not found, setting default \"%s\".\n", - what, - view_settings->view_transform, - default_view->name().c_str()); - } + CLOG_WARN(&LOG, + "%s view \"%s\" not found, setting default \"%s\".", + what, + view_settings->view_transform, + default_view->name().c_str()); STRNCPY_UTF8(view_settings->view_transform, default_view->name().c_str()); } } @@ -930,26 +915,23 @@ static void colormanage_check_view_settings(ColorManagedDisplaySettings *display else { const ocio::Look *look = g_config->get_look_by_name(view_settings->look); if (look == nullptr) { - if (!G.quiet) { - printf("Color management: %s look \"%s\" not found, setting default \"%s\".\n", - what, - view_settings->look, - default_look_name); - } + CLOG_WARN(&LOG, + "%s look \"%s\" not found, setting default \"%s\".", + what, + view_settings->look, + default_look_name); STRNCPY_UTF8(view_settings->look, default_look_name); } else if (!colormanage_compatible_look(look, view_settings->view_transform)) { - if (!G.quiet) { - printf( - "Color management: %s look \"%s\" is not compatible with view \"%s\", setting " - "default " - "\"%s\".\n", - what, - view_settings->look, - view_settings->view_transform, - default_look_name); - } + CLOG_INFO(&LOG, + "%s look \"%s\" is not compatible with view \"%s\", setting " + "default " + "\"%s\".", + what, + view_settings->look, + view_settings->view_transform, + default_look_name); STRNCPY_UTF8(view_settings->look, default_look_name); } @@ -972,11 +954,10 @@ static void colormanage_check_colorspace_settings( const ColorSpace *colorspace = g_config->get_color_space(colorspace_settings->name); if (!colorspace) { - if (!G.quiet) { - printf("Color management: %s colorspace \"%s\" not found, will use default instead.\n", - what, - colorspace_settings->name); - } + CLOG_WARN(&LOG, + "%s colorspace \"%s\" not found, will use default instead.\n", + what, + colorspace_settings->name); STRNCPY_UTF8(colorspace_settings->name, ""); } @@ -1073,9 +1054,7 @@ const char *IMB_colormanagement_role_colorspace_name_get(int role) case COLOR_ROLE_ACES_INTERCHANGE: return global_role_aces_interchange; default: - if (!G.quiet) { - printf("Unknown role was passed to %s\n", __func__); - } + CLOG_WARN(&LOG, "Unknown role was passed to %s", __func__); BLI_assert(0); break; } diff --git a/source/blender/python/intern/bpy_operator.cc b/source/blender/python/intern/bpy_operator.cc index b24910ba1e1..01e6ae4bb61 100644 --- a/source/blender/python/intern/bpy_operator.cc +++ b/source/blender/python/intern/bpy_operator.cc @@ -39,9 +39,10 @@ #include "MEM_guardedalloc.h" #include "BKE_context.hh" -#include "BKE_global.hh" #include "BKE_report.hh" +#include "CLG_log.h" + /* so operators called can spawn threads which acquire the GIL */ #define BPY_RELEASE_GIL @@ -257,7 +258,7 @@ static PyObject *pyop_call(PyObject * /*self*/, PyObject *args) if (!BLI_listbase_is_empty(&reports->list)) { /* Restore the print level as this is owned by the operator now. */ eReportType level = eReportType(reports->printlevel); - BKE_report_print_level_set(reports, G.quiet ? RPT_WARNING : RPT_DEBUG); + BKE_report_print_level_set(reports, CLG_quiet_get() ? RPT_WARNING : RPT_DEBUG); BPy_reports_write_stdout(reports, nullptr); BKE_report_print_level_set(reports, level); } diff --git a/source/blender/python/intern/bpy_rna.cc b/source/blender/python/intern/bpy_rna.cc index 35c5cb19b37..88bc8b5ac35 100644 --- a/source/blender/python/intern/bpy_rna.cc +++ b/source/blender/python/intern/bpy_rna.cc @@ -10172,7 +10172,7 @@ static PyObject *pyrna_register_class(PyObject * /*self*/, PyObject *py_class) if (!BLI_listbase_is_empty(&reports.list)) { const bool has_error = (BPy_reports_to_error(&reports, PyExc_RuntimeError, false) == -1); if (!has_error) { - BKE_report_print_level_set(&reports, G.quiet ? RPT_WARNING : RPT_DEBUG); + BKE_report_print_level_set(&reports, CLG_quiet_get() ? RPT_WARNING : RPT_DEBUG); BPy_reports_write_stdout(&reports, error_prefix); } if (has_error) { diff --git a/source/blender/python/intern/bpy_rna_anim.cc b/source/blender/python/intern/bpy_rna_anim.cc index 9dfff2f19a5..9faae19e76c 100644 --- a/source/blender/python/intern/bpy_rna_anim.cc +++ b/source/blender/python/intern/bpy_rna_anim.cc @@ -50,6 +50,8 @@ #include "DEG_depsgraph.hh" #include "DEG_depsgraph_build.hh" +#include "CLG_log.h" + /* for keyframes and drivers */ static int pyrna_struct_anim_args_parse_ex(PointerRNA *ptr, const char *error_prefix, @@ -436,7 +438,7 @@ PyObject *pyrna_struct_keyframe_insert(BPy_StructRNA *self, PyObject *args, PyOb BKE_reports_free(&reports); return nullptr; } - BKE_report_print_level_set(&reports, G.quiet ? RPT_WARNING : RPT_DEBUG); + BKE_report_print_level_set(&reports, CLG_quiet_get() ? RPT_WARNING : RPT_DEBUG); BPy_reports_write_stdout(&reports, nullptr); BKE_reports_free(&reports); diff --git a/source/blender/render/intern/pipeline.cc b/source/blender/render/intern/pipeline.cc index 6b9275e6218..c723513ee26 100644 --- a/source/blender/render/intern/pipeline.cc +++ b/source/blender/render/intern/pipeline.cc @@ -206,7 +206,8 @@ static void stats_background(void * /*arg*/, RenderStats *rs) static blender::Mutex mutex; std::scoped_lock lock(mutex); - if (!G.quiet) { + const bool show_info = CLOG_CHECK(&LOG, CLG_LEVEL_INFO); + if (show_info) { CLOG_STR_INFO(&LOG, rs->infostr); /* Flush stdout to be sure python callbacks are printing stuff after blender. */ fflush(stdout); @@ -216,7 +217,7 @@ static void stats_background(void * /*arg*/, RenderStats *rs) * Not sure it's actually even used anyway, we could as well pass nullptr? */ BKE_callback_exec_string(G_MAIN, BKE_CB_EVT_RENDER_STATS, rs->infostr); - if (!G.quiet) { + if (show_info) { fflush(stdout); } } @@ -2234,9 +2235,7 @@ bool RE_WriteRenderViewsMovie(ReportList *reports, /* imbuf knows which rects are not part of ibuf */ IMB_freeImBuf(ibuf); } - if (!G.quiet) { - printf("Append frame %d\n", scene->r.cfra); - } + CLOG_INFO(&LOG, "Video append frame %d", scene->r.cfra); } else { /* R_IMF_VIEWS_STEREO_3D */ const char *names[2] = {STEREO_LEFT_NAME, STEREO_RIGHT_NAME}; @@ -2354,7 +2353,8 @@ static bool do_write_image_or_movie( message = fmt::format("{} (Saving: {})", message, filepath); } - if (!G.quiet) { + const bool show_info = CLOG_CHECK(&LOG, CLG_LEVEL_INFO); + if (show_info) { CLOG_STR_INFO(&LOG, message.c_str()); /* Flush stdout to be sure python callbacks are printing stuff after blender. */ fflush(stdout); @@ -2364,7 +2364,7 @@ static bool do_write_image_or_movie( * Not sure it's actually even used anyway, we could as well pass nullptr? */ render_callback_exec_string(re, G_MAIN, BKE_CB_EVT_RENDER_STATS, message.c_str()); - if (!G.quiet) { + if (show_info) { fflush(stdout); } @@ -2551,9 +2551,7 @@ void RE_RenderAnim(Render *re, if (rd.mode & R_NO_OVERWRITE) { if (!is_multiview_name) { if (BLI_exists(filepath)) { - if (!G.quiet) { - printf("skipping existing frame \"%s\"\n", filepath); - } + CLOG_INFO(&LOG, "Skipping existing frame \"%s\"", filepath); totskipped++; continue; } @@ -2570,10 +2568,10 @@ void RE_RenderAnim(Render *re, BKE_scene_multiview_filepath_get(srv, filepath, filepath_view); if (BLI_exists(filepath_view)) { is_skip = true; - if (!G.quiet) { - printf( - "skipping existing frame \"%s\" for view \"%s\"\n", filepath_view, srv->name); - } + CLOG_INFO(&LOG, + "Skipping existing frame \"%s\" for view \"%s\"", + filepath_view, + srv->name); } } diff --git a/source/blender/windowmanager/intern/wm_event_system.cc b/source/blender/windowmanager/intern/wm_event_system.cc index 9d1d8cc5742..1b63d4a151f 100644 --- a/source/blender/windowmanager/intern/wm_event_system.cc +++ b/source/blender/windowmanager/intern/wm_event_system.cc @@ -1179,7 +1179,7 @@ static void wm_operator_reports(bContext *C, if (caller_owns_reports == false) { /* Print out reports to console. * When quiet, only show warnings, suppressing info and other non-essential warnings. */ - const eReportType level = G.quiet ? RPT_WARNING : RPT_DEBUG; + const eReportType level = CLG_quiet_get() ? RPT_WARNING : RPT_DEBUG; BKE_reports_log(op->reports, level, WM_LOG_OPERATORS); } @@ -4433,7 +4433,7 @@ void WM_event_add_fileselect(bContext *C, wmOperator *op) ScrArea *root_area = nullptr; ARegion *root_region = nullptr; - if (!G.quiet) { + if (!CLG_quiet_get()) { /* Perform some sanity checks. * * - Using the file-path sub-types is important because it's possible paths don't use @@ -4454,7 +4454,10 @@ void WM_event_add_fileselect(bContext *C, wmOperator *op) if (!((RNA_property_type(prop) == PROP_STRING) && (RNA_property_subtype(prop) == PROP_FILEPATH))) { - printf("%s: \"%s\" expected a string with a 'FILE_PATH' subtype.\n", prefix, prop_id); + CLOG_WARN(WM_LOG_OPERATORS, + "%s: \"%s\" expected a string with a 'FILE_PATH' subtype.", + prefix, + prop_id); } } prop_id = "directory"; @@ -4463,7 +4466,10 @@ void WM_event_add_fileselect(bContext *C, wmOperator *op) if (!((RNA_property_type(prop) == PROP_STRING) && (RNA_property_subtype(prop) == PROP_DIRPATH))) { - printf("%s: \"%s\" expected a string with a 'DIR_PATH' subtype.\n", prefix, prop_id); + CLOG_WARN(WM_LOG_OPERATORS, + "%s: \"%s\" expected a string with a 'DIR_PATH' subtype.", + prefix, + prop_id); } } @@ -4473,7 +4479,10 @@ void WM_event_add_fileselect(bContext *C, wmOperator *op) if (!((RNA_property_type(prop) == PROP_STRING) && (RNA_property_subtype(prop) == PROP_FILENAME))) { - printf("%s: \"%s\" expected a string with a 'FILE_NAME' subtype.\n", prefix, prop_id); + CLOG_WARN(WM_LOG_OPERATORS, + "%s: \"%s\" expected a string with a 'FILE_NAME' subtype.", + prefix, + prop_id); } } diff --git a/source/blender/windowmanager/intern/wm_files.cc b/source/blender/windowmanager/intern/wm_files.cc index 1d91b35f50e..8f6e2ed60f9 100644 --- a/source/blender/windowmanager/intern/wm_files.cc +++ b/source/blender/windowmanager/intern/wm_files.cc @@ -2527,9 +2527,7 @@ static wmOperatorStatus wm_homefile_write_exec(bContext *C, wmOperator *op) BLI_path_join(filepath, sizeof(filepath), cfgdir->c_str(), BLENDER_STARTUP_FILE); - if (!G.quiet) { - printf("Writing homefile: \"%s\" ", filepath); - } + CLOG_INFO_NOCHECK(&LOG, "Writing startup file: \"%s\" ", filepath); ED_editors_flush_edits(bmain); @@ -2550,15 +2548,10 @@ static wmOperatorStatus wm_homefile_write_exec(bContext *C, wmOperator *op) BKE_callback_exec_string(bmain, success ? BKE_CB_EVT_SAVE_POST : BKE_CB_EVT_SAVE_POST_FAIL, ""); if (success) { - if (!G.quiet) { - printf("ok\n"); - } BKE_report(op->reports, RPT_INFO, "Startup file saved"); return OPERATOR_FINISHED; } - if (!G.quiet) { - printf("fail\n"); - } + CLOG_WARN(&LOG, "Failed to write startup file"); return OPERATOR_CANCELLED; } diff --git a/source/blender/windowmanager/intern/wm_init_exit.cc b/source/blender/windowmanager/intern/wm_init_exit.cc index f0a3c97dd6e..4cb93d82848 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.cc +++ b/source/blender/windowmanager/intern/wm_init_exit.cc @@ -471,9 +471,7 @@ void WM_exit_ex(bContext *C, const bool do_python_exit, const bool do_user_exit_ BlendFileWriteParams blend_file_write_params{}; if (BLO_write_file(bmain, filepath, fileflags, &blend_file_write_params, nullptr)) { - if (!G.quiet) { - CLOG_INFO_NOCHECK(&LOG_BLEND, "Saved session recovery to \"%s\"", filepath); - } + CLOG_INFO_NOCHECK(&LOG_BLEND, "Saved session recovery to \"%s\"", filepath); } } @@ -687,7 +685,7 @@ void WM_exit(bContext *C, const int exit_code) const bool do_user_exit_actions = G.background ? false : (exit_code == EXIT_SUCCESS); WM_exit_ex(C, true, do_user_exit_actions); - if (!G.quiet) { + if (!CLG_quiet_get()) { printf("\nBlender quit\n"); } diff --git a/source/creator/creator_args.cc b/source/creator/creator_args.cc index 86ae479c1d8..b006c002840 100644 --- a/source/creator/creator_args.cc +++ b/source/creator/creator_args.cc @@ -1029,7 +1029,7 @@ static const char arg_handle_quiet_set_doc[] = "Suppress status printing (warnings & errors are still printed)."; static int arg_handle_quiet_set(int /*argc*/, const char ** /*argv*/, void * /*data*/) { - G.quiet = true; + CLG_quiet_set(true); return 0; } @@ -1064,7 +1064,7 @@ static const char arg_handle_background_mode_set_doc[] = "\tand can be re-enabled by passing in '-setaudio Default' afterwards."; static int arg_handle_background_mode_set(int /*argc*/, const char ** /*argv*/, void * /*data*/) { - if (!G.quiet) { + if (!CLG_quiet_get()) { print_version_short(); } background_mode_set(); @@ -1087,7 +1087,7 @@ static int arg_handle_command_set(int argc, const char **argv, void *data) BLI_assert_unreachable(); } /* Application "info" messages get in the way of command line output, suppress them. */ - G.quiet = true; + CLG_quiet_set(true); background_mode_set(); @@ -1843,7 +1843,7 @@ static const char arg_handle_register_extension_doc[] = "Register blend-file extension for current user, then exit (Windows & Linux only)."; static int arg_handle_register_extension(int argc, const char **argv, void *data) { - G.quiet = true; + CLG_quiet_set(true); background_mode_set(); # if !(defined(WIN32) && defined(__APPLE__)) @@ -1861,7 +1861,7 @@ static const char arg_handle_register_extension_all_doc[] = "Register blend-file extension for all users, then exit (Windows & Linux only)."; static int arg_handle_register_extension_all(int argc, const char **argv, void *data) { - G.quiet = true; + CLG_quiet_set(true); background_mode_set(); # if !(defined(WIN32) && defined(__APPLE__)) @@ -1879,7 +1879,7 @@ static const char arg_handle_unregister_extension_doc[] = "Unregister blend-file extension for current user, then exit (Windows & Linux only)."; static int arg_handle_unregister_extension(int argc, const char **argv, void *data) { - G.quiet = true; + CLG_quiet_set(true); background_mode_set(); # if !(defined(WIN32) && defined(__APPLE__)) @@ -1897,7 +1897,7 @@ static const char arg_handle_unregister_extension_all_doc[] = "Unregister blend-file extension for all users, then exit (Windows & Linux only)."; static int arg_handle_unregister_extension_all(int argc, const char **argv, void *data) { - G.quiet = true; + CLG_quiet_set(true); background_mode_set(); # if !(defined(WIN32) && defined(__APPLE__))