mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MDEV-27087: Add thread ID and database / table, where the error occured
to SQL error plugin New plugin variable "with_db_and_thread_info" is added which prints the thread id and databse name to the logfile. the value is stored in variable "with_db_and_thread_info" log_sql_errors() is responsible for printing in the log. If detailed is enabled, print thread id and database name both, otherwise skip it.
This commit is contained in:
30
mysql-test/include/read_head.inc
Normal file
30
mysql-test/include/read_head.inc
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Purpose:
|
||||||
|
# Print first LINES_TO_READ from a file.
|
||||||
|
# The environment variables SEARCH_FILE and LINES_TO_READ must be set
|
||||||
|
# before sourcing this routine.
|
||||||
|
# Use:
|
||||||
|
# When the test is slow ( example because of ASAN build) then it
|
||||||
|
# may not flush the lines when 'cat' command is called and the
|
||||||
|
# test could fail with missing lines. Hence this can be used to
|
||||||
|
# to print first N lines.
|
||||||
|
#
|
||||||
|
|
||||||
|
perl;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
my $search_file = $ENV{SEARCH_FILE} or die "SEARCH_FILE not set";
|
||||||
|
my $lines_to_read = $ENV{LINES_TO_READ} or die "LINES_TO_READ not set";
|
||||||
|
|
||||||
|
open(FILE, '<', $search_file) or die "Can't open file $search_file: $!";
|
||||||
|
|
||||||
|
my $line_count = 0;
|
||||||
|
while ($line_count < $lines_to_read and my $line = <FILE>)
|
||||||
|
{
|
||||||
|
print $line;
|
||||||
|
$line_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(FILE);
|
||||||
|
|
||||||
|
EOF
|
12
mysql-test/suite/plugins/r/mdev_27087.result
Normal file
12
mysql-test/suite/plugins/r/mdev_27087.result
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
show variables like 'sql_error_log%';
|
||||||
|
Variable_name Value
|
||||||
|
sql_error_log_filename sql_errors.log
|
||||||
|
sql_error_log_rate 1
|
||||||
|
sql_error_log_rotate OFF
|
||||||
|
sql_error_log_rotations 9
|
||||||
|
sql_error_log_size_limit 1000000
|
||||||
|
sql_error_log_with_db_and_thread_info ON
|
||||||
|
set global sql_error_log_rate=1;
|
||||||
|
select * from t_doesnt_exist;
|
||||||
|
ERROR 42S02: Table 'test.t_doesnt_exist' doesn't exist
|
||||||
|
THREAD_ID DATABASE_NAME TIME HOSTNAME ERROR 1146: Table 'test.t_doesnt_exist' doesn't exist : select * from t_doesnt_exist
|
@@ -8,6 +8,7 @@ sql_error_log_rate 1
|
|||||||
sql_error_log_rotate OFF
|
sql_error_log_rotate OFF
|
||||||
sql_error_log_rotations 9
|
sql_error_log_rotations 9
|
||||||
sql_error_log_size_limit 1000000
|
sql_error_log_size_limit 1000000
|
||||||
|
sql_error_log_with_db_and_thread_info OFF
|
||||||
set global sql_error_log_rate=1;
|
set global sql_error_log_rate=1;
|
||||||
select * from t_doesnt_exist;
|
select * from t_doesnt_exist;
|
||||||
ERROR 42S02: Table 'test.t_doesnt_exist' doesn't exist
|
ERROR 42S02: Table 'test.t_doesnt_exist' doesn't exist
|
||||||
|
1
mysql-test/suite/plugins/t/mdev_27087.opt
Normal file
1
mysql-test/suite/plugins/t/mdev_27087.opt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
--plugin-load-add=$SQL_ERRLOG_SO --sql-error-log-with-db-and-thread-info=1
|
18
mysql-test/suite/plugins/t/mdev_27087.test
Normal file
18
mysql-test/suite/plugins/t/mdev_27087.test
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
--source include/not_embedded.inc
|
||||||
|
|
||||||
|
if (!$SQL_ERRLOG_SO) {
|
||||||
|
skip No SQL_ERROR_LOG plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
show variables like 'sql_error_log%';
|
||||||
|
set global sql_error_log_rate=1;
|
||||||
|
--error ER_NO_SUCH_TABLE
|
||||||
|
select * from t_doesnt_exist;
|
||||||
|
|
||||||
|
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||||
|
--let SEARCH_FILE= $MYSQLD_DATADIR/sql_errors.log
|
||||||
|
--let LINES_TO_READ=1
|
||||||
|
--replace_regex /[1-9]* test [1-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] [^E]*/THREAD_ID DATABASE_NAME TIME HOSTNAME /
|
||||||
|
--source include/read_head.inc
|
||||||
|
|
||||||
|
remove_file $MYSQLD_DATADIR/sql_errors.log;
|
@@ -39,6 +39,7 @@ static unsigned int rate;
|
|||||||
static unsigned long long size_limit;
|
static unsigned long long size_limit;
|
||||||
static unsigned int rotations;
|
static unsigned int rotations;
|
||||||
static char rotate;
|
static char rotate;
|
||||||
|
static char with_db_and_thread_info;
|
||||||
|
|
||||||
static unsigned int count;
|
static unsigned int count;
|
||||||
LOGGER_HANDLE *logfile;
|
LOGGER_HANDLE *logfile;
|
||||||
@@ -67,12 +68,19 @@ static MYSQL_SYSVAR_STR(filename, filename,
|
|||||||
"The file to log sql errors to", NULL, NULL,
|
"The file to log sql errors to", NULL, NULL,
|
||||||
"sql_errors.log");
|
"sql_errors.log");
|
||||||
|
|
||||||
|
static MYSQL_SYSVAR_BOOL(with_db_and_thread_info, with_db_and_thread_info,
|
||||||
|
PLUGIN_VAR_READONLY | PLUGIN_VAR_OPCMDARG,
|
||||||
|
"Show details about thread id and database name in the log",
|
||||||
|
NULL, NULL,
|
||||||
|
0);
|
||||||
|
|
||||||
static struct st_mysql_sys_var* vars[] = {
|
static struct st_mysql_sys_var* vars[] = {
|
||||||
MYSQL_SYSVAR(rate),
|
MYSQL_SYSVAR(rate),
|
||||||
MYSQL_SYSVAR(size_limit),
|
MYSQL_SYSVAR(size_limit),
|
||||||
MYSQL_SYSVAR(rotations),
|
MYSQL_SYSVAR(rotations),
|
||||||
MYSQL_SYSVAR(rotate),
|
MYSQL_SYSVAR(rotate),
|
||||||
MYSQL_SYSVAR(filename),
|
MYSQL_SYSVAR(filename),
|
||||||
|
MYSQL_SYSVAR(with_db_and_thread_info),
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -93,12 +101,24 @@ static void log_sql_errors(MYSQL_THD thd __attribute__((unused)),
|
|||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
(void) localtime_r(&event_time, &t);
|
(void) localtime_r(&event_time, &t);
|
||||||
logger_printf(logfile, "%04d-%02d-%02d %2d:%02d:%02d "
|
if (with_db_and_thread_info)
|
||||||
|
{
|
||||||
|
logger_printf(logfile, "%llu %s %04d-%02d-%02d %2d:%02d:%02d "
|
||||||
|
"%s ERROR %d: %s : %s \n",
|
||||||
|
event->general_thread_id, event->database.str, t.tm_year + 1900,
|
||||||
|
t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,
|
||||||
|
event->general_user, event->general_error_code,
|
||||||
|
event->general_command, event->general_query);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger_printf(logfile, "%04d-%02d-%02d %2d:%02d:%02d "
|
||||||
"%s ERROR %d: %s : %s\n",
|
"%s ERROR %d: %s : %s\n",
|
||||||
t.tm_year + 1900, t.tm_mon + 1,
|
t.tm_year + 1900, t.tm_mon + 1,
|
||||||
t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,
|
t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,
|
||||||
event->general_user, event->general_error_code,
|
event->general_user, event->general_error_code,
|
||||||
event->general_command, event->general_query);
|
event->general_command, event->general_query);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -157,7 +177,7 @@ maria_declare_plugin(sql_errlog)
|
|||||||
0x0100,
|
0x0100,
|
||||||
NULL,
|
NULL,
|
||||||
vars,
|
vars,
|
||||||
"1.0",
|
"1.1",
|
||||||
MariaDB_PLUGIN_MATURITY_STABLE
|
MariaDB_PLUGIN_MATURITY_STABLE
|
||||||
}
|
}
|
||||||
maria_declare_plugin_end;
|
maria_declare_plugin_end;
|
||||||
|
Reference in New Issue
Block a user