[Groonga-mysql-commit] mroonga/mroonga [master] added log level. global system variable "groonga_log_level".

Back to archive index

null+****@clear***** null+****@clear*****
2010年 11月 23日 (火) 21:06:11 JST


Tetsuro IKEDA	2010-11-23 12:06:11 +0000 (Tue, 23 Nov 2010)

  New Revision: e7c69fe7b663f7ae1eea474a9f8755c982068ccb

  Log:
    added log level. global system variable "groonga_log_level".

  Added files:
    test/sql/r/log_level.result
    test/sql/t/log_level.test
  Modified files:
    ha_mroonga.cc

  Modified: ha_mroonga.cc (+42 -1)
===================================================================
--- ha_mroonga.cc    2010-11-23 02:40:13 +0000 (1e9dfe7)
+++ ha_mroonga.cc    2010-11-23 12:06:11 +0000 (e5730ec)
@@ -68,6 +68,8 @@ long mrn_count_skip = 0;
 const char *mrn_logfile_name = MRN_LOG_FILE_NAME;
 FILE *mrn_logfile = NULL;
 int mrn_logfile_opened = 0;
+grn_log_level mrn_log_level_default = GRN_LOG_DUMP;
+ulong mrn_log_level = (ulong) mrn_log_level_default;
 
 void mrn_logger_func(int level, const char *time, const char *title,
                      const char *msg, const char *location, void *func_arg)
@@ -83,7 +85,7 @@ void mrn_logger_func(int level, const char *time, const char *title,
 }
 
 grn_logger_info mrn_logger_info = {
-  GRN_LOG_DUMP,
+  mrn_log_level_default,
   GRN_LOG_TIME|GRN_LOG_MESSAGE,
   mrn_logger_func,
   NULL
@@ -122,8 +124,45 @@ struct st_mysql_show_var mrn_status_variables[] =
   {NullS, NullS, SHOW_LONG}
 };
 
+const char *mrn_log_level_type_names[] = { "NONE", "EMERG", "ALERT",
+                                           "CRIT", "ERROR", "WARNING",
+                                           "NOTICE", "INFO", "DEBUG",
+                                           "DUMP", NullS };
+TYPELIB mrn_log_level_typelib=
+{
+  array_elements(mrn_log_level_type_names)-1,
+  "mrn_log_level_typelib",
+  mrn_log_level_type_names,
+  NULL
+};
+
+static void mrn_log_level_update(THD *thd, struct st_mysql_sys_var *var,
+                                      void *var_ptr, const void *save)
+{
+  DBUG_ENTER("mrn_log_level_update");
+  ulong new_value = *(ulong*) save;
+  ulong old_value = mrn_log_level;
+  mrn_log_level = new_value;
+  mrn_logger_info.max_level = (grn_log_level) mrn_log_level;
+  grn_ctx *ctx = grn_ctx_open(0);
+  GRN_LOG(ctx, GRN_LOG_NOTICE, "log level changed from '%s' to '%s'", 
+          mrn_log_level_type_names[old_value],
+          mrn_log_level_type_names[new_value]);
+  grn_ctx_fin(ctx);
+  DBUG_VOID_RETURN;
+}
+
+static MYSQL_SYSVAR_ENUM(log_level, mrn_log_level,
+                         PLUGIN_VAR_RQCMDARG,
+                         "logging level",
+                         NULL,
+                         mrn_log_level_update,
+                         (ulong) mrn_log_level,
+                         &mrn_log_level_typelib);
+
 struct st_mysql_sys_var *mrn_system_variables[] =
 {
+  MYSQL_SYSVAR(log_level),
   NULL
 };
 
@@ -289,6 +328,8 @@ int mrn_init(void *p)
   }
   mrn_logfile_opened = 1;
   GRN_LOG(ctx, GRN_LOG_NOTICE, "%s started.", MRN_PACKAGE_STRING);
+  GRN_LOG(ctx, GRN_LOG_NOTICE, "log level is '%s'",
+          mrn_log_level_type_names[mrn_log_level]);
 
   // init meta-info database
   if (!(mrn_db = grn_db_create(ctx, NULL, NULL))) {

  Added: test/sql/r/log_level.result (+47 -0) 100644
===================================================================
--- /dev/null
+++ test/sql/r/log_level.result    2010-11-23 12:06:11 +0000 (72df98b)
@@ -0,0 +1,47 @@
+show global variables like 'groonga_log_level';
+Variable_name	Value
+groonga_log_level	DUMP
+set global groonga_log_level=NONE;
+show global variables like 'groonga_log_level';
+Variable_name	Value
+groonga_log_level	NONE
+set global groonga_log_level=EMERG;
+show global variables like 'groonga_log_level';
+Variable_name	Value
+groonga_log_level	EMERG
+set global groonga_log_level=ALERT;
+show global variables like 'groonga_log_level';
+Variable_name	Value
+groonga_log_level	ALERT
+set global groonga_log_level=CRIT;
+show global variables like 'groonga_log_level';
+Variable_name	Value
+groonga_log_level	CRIT
+set global groonga_log_level=ERROR;
+show global variables like 'groonga_log_level';
+Variable_name	Value
+groonga_log_level	ERROR
+set global groonga_log_level=WARNING;
+show global variables like 'groonga_log_level';
+Variable_name	Value
+groonga_log_level	WARNING
+set global groonga_log_level=NOTICE;
+show global variables like 'groonga_log_level';
+Variable_name	Value
+groonga_log_level	NOTICE
+set global groonga_log_level=INFO;
+show global variables like 'groonga_log_level';
+Variable_name	Value
+groonga_log_level	INFO
+set global groonga_log_level=DEBUG;
+show global variables like 'groonga_log_level';
+Variable_name	Value
+groonga_log_level	DEBUG
+set global groonga_log_level=DUMP;
+show global variables like 'groonga_log_level';
+Variable_name	Value
+groonga_log_level	DUMP
+set global groonga_log_level=dummy;
+ERROR 42000: Variable 'groonga_log_level' can't be set to the value of 'dummy'
+set session groonga_log_level=NOTICE;
+ERROR HY000: Variable 'groonga_log_level' is a GLOBAL variable and should be set with SET GLOBAL

  Added: test/sql/t/log_level.test (+56 -0) 100644
===================================================================
--- /dev/null
+++ test/sql/t/log_level.test    2010-11-23 12:06:11 +0000 (4624216)
@@ -0,0 +1,56 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+--source suite/groonga/include/groonga.inc
+
+show global variables like 'groonga_log_level';
+
+set global groonga_log_level=NONE;
+show global variables like 'groonga_log_level';
+
+set global groonga_log_level=EMERG;
+show global variables like 'groonga_log_level';
+
+set global groonga_log_level=ALERT;
+show global variables like 'groonga_log_level';
+
+set global groonga_log_level=CRIT;
+show global variables like 'groonga_log_level';
+
+set global groonga_log_level=ERROR;
+show global variables like 'groonga_log_level';
+
+set global groonga_log_level=WARNING;
+show global variables like 'groonga_log_level';
+
+set global groonga_log_level=NOTICE;
+show global variables like 'groonga_log_level';
+
+set global groonga_log_level=INFO;
+show global variables like 'groonga_log_level';
+
+set global groonga_log_level=DEBUG;
+show global variables like 'groonga_log_level';
+
+set global groonga_log_level=DUMP;
+show global variables like 'groonga_log_level';
+
+--error 1231
+set global groonga_log_level=dummy;
+
+--error 1229
+set session groonga_log_level=NOTICE;
+




Groonga-mysql-commit メーリングリストの案内
Back to archive index