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;
+