[Bf-blender-cvs] [175dd297ddf] soc-2020-info-editor: Expose part of logging properties in preferences

Mateusz Grzeliński noreply at git.blender.org
Wed Jul 29 20:41:05 CEST 2020


Commit: 175dd297ddf65e0d2bd470e54e6c887407f1ac3e
Author: Mateusz Grzeliński
Date:   Wed Jul 29 18:59:15 2020 +0200
Branches: soc-2020-info-editor
https://developer.blender.org/rB175dd297ddf65e0d2bd470e54e6c887407f1ac3e

Expose part of logging properties in preferences

===================================================================

M	intern/clog/CLG_log.h
M	intern/clog/clog.c
M	release/scripts/startup/bl_ui/space_userpref.py
M	source/blender/blenkernel/BKE_global.h
M	source/blender/blenkernel/intern/blender.c
M	source/blender/makesrna/intern/rna_userdef.c
M	source/creator/creator_args.c

===================================================================

diff --git a/intern/clog/CLG_log.h b/intern/clog/CLG_log.h
index ad11cc0d1dc..99604574730 100644
--- a/intern/clog/CLG_log.h
+++ b/intern/clog/CLG_log.h
@@ -88,6 +88,7 @@ extern "C" {
 /* For printing timestamp. */
 #define __STDC_FORMAT_MACROS
 #include <inttypes.h>
+#include <stdbool.h>
 
 #define STRINGIFY_ARG(x) "" #x
 #define STRINGIFY_APPEND(a, b) "" a #b
@@ -170,8 +171,13 @@ void clog_log_record_free(CLG_LogRecord *log_record);
 void CLG_init(void);
 void CLG_exit(void);
 
-void CLG_output_set(void *file_handle);
+bool CLG_use_stdout_get(void);
+void CLG_use_stdout_set(bool value);
+char *CLG_file_output_path_get(void);
+void CLG_file_output_path_set(const char *value);
+bool CLG_output_use_basename_get(void);
 void CLG_output_use_basename_set(int value);
+bool CLG_output_use_timestamp_get(void);
 void CLG_output_use_timestamp_set(int value);
 void CLG_fatal_fn_set(void (*fatal_fn)(void *file_handle));
 void CLG_backtrace_fn_set(void (*fatal_fn)(void *file_handle));
@@ -179,7 +185,9 @@ void CLG_backtrace_fn_set(void (*fatal_fn)(void *file_handle));
 void CLG_type_filter_include(const char *type_filter, int type_filter_len);
 void CLG_type_filter_exclude(const char *type_filter, int type_filter_len);
 
+enum CLG_Severity CLG_severity_level_get(void);
 void CLG_severity_level_set(enum CLG_Severity level);
+short CLG_verbosity_level_get(void);
 void CLG_verbosity_level_set(unsigned short level);
 struct LogRecordList *CLG_log_record_get(void);
 
diff --git a/intern/clog/clog.c b/intern/clog/clog.c
index fd98f104e79..7d8c18a3706 100644
--- a/intern/clog/clog.c
+++ b/intern/clog/clog.c
@@ -44,6 +44,7 @@
 
 /* For printing timestamp. */
 #define __STDC_FORMAT_MACROS
+#include <errno.h>
 #include <inttypes.h>
 
 /* Only other dependency (could use regular malloc too). */
@@ -87,7 +88,7 @@ typedef struct CLogContext {
   bool use_basename;
   bool use_timestamp;
 
-  /** Borrowed, not owned. */
+  /** Owned. */
   int output;
   FILE *output_file;
 
@@ -105,6 +106,9 @@ typedef struct CLogContext {
     void (*backtrace_fn)(void *file_handle);
   } callbacks;
 
+  bool use_stdout;
+  /** used only is use_stdout is false */
+  char output_file_path[256];
 } CLogContext;
 
 /** \} */
@@ -604,20 +608,75 @@ void CLG_logf(CLG_LogType *lg,
 /** \name Logging Context API
  * \{ */
 
-static void CLG_ctx_output_set(CLogContext *ctx, void *file_handle)
+static void CLG_ctx_output_update(CLogContext *ctx)
 {
-  ctx->output_file = file_handle;
+  if (ctx->use_stdout && ctx->output_file != stdout) {
+    /* set output to stdout */
+    if (ctx->output_file != NULL) {
+      fclose(ctx->output_file);
+    }
+    ctx->output_file = stdout;
+  }
+
+  if (!ctx->use_stdout) {
+    FILE *fp = fopen(ctx->output_file_path, "w");
+    if (fp == NULL) {
+      const char *err_msg = errno ? strerror(errno) : "unknown";
+      printf("Error: %s '%s'.\n", err_msg, ctx->output_file_path);
+      return;
+    }
+    ctx->output_file = fp;
+  }
   ctx->output = fileno(ctx->output_file);
 #if defined(__unix__) || defined(__APPLE__)
   ctx->use_color = isatty(ctx->output);
 #endif
 }
 
+static char *CLG_ctx_file_output_path_get(CLogContext *ctx)
+{
+  return ctx->output_file_path;
+}
+
+static void CLG_ctx_file_output_path_set(CLogContext *ctx, const char *value)
+{
+  if (strcmp(ctx->output_file_path, value) != 0) {
+    strcpy(ctx->output_file_path, value);
+    if (!ctx->use_stdout) {
+      CLG_ctx_output_update(ctx);
+    }
+  }
+}
+
+static bool CLG_ctx_use_stdout_get(CLogContext *ctx)
+{
+  return ctx->use_stdout;
+}
+
+static void CLG_ctx_use_stdout_set(CLogContext *ctx, bool value)
+{
+  if (ctx->use_stdout == value) {
+    return;
+  }
+  ctx->use_stdout = value;
+  CLG_ctx_output_update(ctx);
+}
+
+static bool CLG_ctx_output_use_basename_get(CLogContext *ctx)
+{
+  return ctx->use_basename;
+}
+
 static void CLG_ctx_output_use_basename_set(CLogContext *ctx, int value)
 {
   ctx->use_basename = (bool)value;
 }
 
+static bool CLG_ctx_output_use_timestamp_get(CLogContext *ctx)
+{
+  return ctx->use_timestamp;
+}
+
 static void CLG_ctx_output_use_timestamp_set(CLogContext *ctx, int value)
 {
   ctx->use_timestamp = (bool)value;
@@ -665,6 +724,11 @@ static void CLG_ctx_type_filter_include(CLogContext *ctx,
   clg_ctx_type_filter_append(&ctx->filters[1], type_match, type_match_len);
 }
 
+static enum CLG_Severity CLG_ctx_severity_level_get(CLogContext *ctx)
+{
+  return ctx->default_type.severity_level;
+}
+
 static void CLG_ctx_severity_level_set(CLogContext *ctx, enum CLG_Severity level)
 {
   ctx->default_type.severity_level = level;
@@ -673,6 +737,11 @@ static void CLG_ctx_severity_level_set(CLogContext *ctx, enum CLG_Severity level
   }
 }
 
+static short CLG_ctx_verbosity_level_get(CLogContext *ctx)
+{
+  return ctx->default_type.verbosity_level;
+}
+
 static void CLG_ctx_verbosity_level_set(CLogContext *ctx, unsigned short level)
 {
   ctx->default_type.verbosity_level = level;
@@ -695,7 +764,8 @@ static CLogContext *CLG_ctx_init(void)
   ctx->use_color = true;
   ctx->default_type.severity_level = CLG_SEVERITY_INFO;
   ctx->default_type.verbosity_level = 0;
-  CLG_ctx_output_set(ctx, stdout);
+  ctx->use_stdout = true;
+  CLG_ctx_output_update(ctx);
 
   return ctx;
 }
@@ -708,6 +778,9 @@ static void CLG_ctx_free(CLogContext *ctx)
     clog_log_record_free(log);
     log = log_next;
   }
+  if (ctx->output_file != NULL) {
+    fclose(ctx->output_file);
+  }
   ctx->log_records.first = NULL;
   ctx->log_records.last = NULL;
 
@@ -753,9 +826,29 @@ void CLG_exit(void)
   CLG_ctx_free(g_ctx);
 }
 
-void CLG_output_set(void *file_handle)
+void CLG_file_output_path_set(const char *CLG_file_output_path_get)
+{
+  CLG_ctx_file_output_path_set(g_ctx, CLG_file_output_path_get);
+}
+
+char *CLG_file_output_path_get()
 {
-  CLG_ctx_output_set(g_ctx, file_handle);
+  return CLG_ctx_file_output_path_get(g_ctx);
+}
+
+bool CLG_use_stdout_get()
+{
+  return CLG_ctx_use_stdout_get(g_ctx);
+}
+
+void CLG_use_stdout_set(bool value)
+{
+  CLG_ctx_use_stdout_set(g_ctx, value);
+}
+
+bool CLG_output_use_basename_get()
+{
+  return CLG_ctx_output_use_basename_get(g_ctx);
 }
 
 void CLG_output_use_basename_set(int value)
@@ -763,6 +856,11 @@ void CLG_output_use_basename_set(int value)
   CLG_ctx_output_use_basename_set(g_ctx, value);
 }
 
+bool CLG_output_use_timestamp_get()
+{
+  return CLG_ctx_output_use_timestamp_get(g_ctx);
+}
+
 void CLG_output_use_timestamp_set(int value)
 {
   CLG_ctx_output_use_timestamp_set(g_ctx, value);
@@ -793,11 +891,21 @@ void CLG_severity_level_set(enum CLG_Severity level)
   CLG_ctx_severity_level_set(g_ctx, level);
 }
 
+enum CLG_Severity CLG_severity_level_get()
+{
+  return CLG_ctx_severity_level_get(g_ctx);
+}
+
 void CLG_verbosity_level_set(unsigned short level)
 {
   CLG_ctx_verbosity_level_set(g_ctx, level);
 }
 
+short CLG_verbosity_level_get()
+{
+  return CLG_ctx_verbosity_level_get(g_ctx);
+}
+
 LogRecordList *CLG_log_record_get()
 {
   return CLG_ctx_log_record_get(g_ctx);
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 03f85578b6e..f5cb1cfd29d 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -644,6 +644,27 @@ class USERPREF_PT_system_video_sequencer(SystemPanel, CenterAlignMixIn, Panel):
         col.prop(system, "sequencer_disk_cache_compression", text="Compression")
 
 
+class USERPREF_PT_system_logging(SystemPanel, CenterAlignMixIn, Panel):
+    bl_label = "Logging"
+
+    def draw_centered(self, context, layout):
+        prefs = context.preferences
+        system = prefs.system
+
+        layout.prop(system, "log_use_basename")
+        layout.prop(system, "log_use_timestamp")
+        layout.prop(system, "log_severity")
+        layout.prop(system, "verbose")
+
+        col = layout.column()
+        col.active = system.log_severity == 'LOG_VERBOSE'
+        col.prop(system, "log_verbosity")
+
+        layout.prop(system, "log_use_stdout")
+        col = layout.column()
+        col.active = not system.log_use_stdout
+        col.prop(system, "log_output_file")
+
 # -----------------------------------------------------------------------------
 # Viewport Panels
 
@@ -2233,6 +2254,7 @@ classes = (
     USERPREF_PT_system_cycles_devices,
     USERPREF_PT_system_memory,
     USERPREF_PT_system_video_sequencer,
+    USERPREF_PT_system_logging,
     USERPREF_PT_system_sound,
 
     USERPREF_MT_interface_theme_presets,
diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h
index 66142cf782b..4ae6af95ebe 100644
--- a/source/blender/blenkernel/BKE_global.h
+++ b/source/blender/blenkernel/BKE_global.h
@@ -88,10 +88,10 @@ typedef struct Global {
   int f;
 
   struct {
-    /** Logging vars (different loggers may use). */
-    int level; /* currently unused */
+    /** Verbosity for third party loggers */
+    int level;
     /** FILE handle or use stderr (we own this so close when done). */
-    void *file;
+    void *file; /* currently unused */
   } log;
 
   /** debug flag, #G_DEBUG, #G_DEBUG_PYTHON & friends, set python or command line args */
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index e8aa13a8beb..5443b3c1f31 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -81,10 +81,6 @@ void BKE_blender_free(void)
   BKE_main_free(G_MAIN);
   G_MAIN = NULL;
 
-  if (G.log.file != NULL) {
-    fclose(G.log.file);
-  }
-
   BKE_spacetypes_free(); /* after free main, it uses space callbacks */
 
   IMB_exit();
@@ -152,8 +148,6 @@ void BKE_blender_globals_init(void)
 #else
   G.f &= ~G_FLAG_SCRIPT_AUTOEXEC;
 #endif
-
-  G.log.level = 1;
 }
 
 void BKE_blender_globals_clear(void)
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index d2ada217f78..320a79c2f5f 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -18,6 +18,8 @@
  * \ingroup RNA
  */
 
+#include <BLI_string.h>
+#include <CLG_log.h>
 #include <limits.h>
 #include <stdlib.h>
 
@@ -172,6 +17

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list