From 1498a23d4eae66cd3bcaccc536522b7922526215 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 12 Apr 2022 13:30:35 +0800 Subject: [PATCH] executor,util: write slow query to slow log no matter what log level (#30461) (#30494) close pingcap/tidb#30309 --- executor/adapter.go | 9 ++++----- util/logutil/log_test.go | 8 ++++++-- util/logutil/slow_query_logger.go | 3 +++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/executor/adapter.go b/executor/adapter.go index 7dd83d2de71b1..2907c7d3032f5 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -1014,13 +1014,12 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool, hasMoreResults bool) { if _, ok := a.StmtNode.(*ast.CommitStmt); ok { slowItems.PrevStmt = sessVars.PrevStmt.String() } + slowLog := sessVars.SlowLogFormat(slowItems) if trace.IsEnabled() { - trace.Log(a.GoCtx, "details", sessVars.SlowLogFormat(slowItems)) + trace.Log(a.GoCtx, "details", slowLog) } - if costTime < threshold { - logutil.SlowQueryLogger.Debug(sessVars.SlowLogFormat(slowItems)) - } else { - logutil.SlowQueryLogger.Warn(sessVars.SlowLogFormat(slowItems)) + logutil.SlowQueryLogger.Warn(slowLog) + if costTime >= threshold { if sessVars.InRestrictedSQL { totalQueryProcHistogramInternal.Observe(costTime.Seconds()) totalCopProcHistogramInternal.Observe(execDetail.TimeDetail.ProcessTime.Seconds()) diff --git a/util/logutil/log_test.go b/util/logutil/log_test.go index 4c5232c50cd1f..fc0c8d3c5159b 100644 --- a/util/logutil/log_test.go +++ b/util/logutil/log_test.go @@ -24,6 +24,7 @@ import ( "github.com/pingcap/log" "github.com/stretchr/testify/require" "go.uber.org/zap" + "go.uber.org/zap/zapcore" ) func TestZapLoggerWithKeys(t *testing.T) { @@ -114,11 +115,14 @@ func TestGrpcLoggerCreation(t *testing.T) { } func TestSlowQueryLoggerCreation(t *testing.T) { - level := "warn" + level := "Error" conf := NewLogConfig(level, DefaultLogFormat, "", EmptyFileLogConfig, false) _, prop, err := newSlowQueryLogger(conf) // assert after init slow query logger, the original conf is not changed require.Equal(t, conf.Level, level) require.Nil(t, err) - require.Equal(t, prop.Level.String(), conf.Level) + // slow query logger doesn't use the level of the global log config, and the + // level should be less than WarnLevel which is used by it to log slow query. + require.NotEqual(t, conf.Level, prop.Level.String()) + require.True(t, prop.Level.Level() <= zapcore.WarnLevel) } diff --git a/util/logutil/slow_query_logger.go b/util/logutil/slow_query_logger.go index 433fd5746eca7..c64333afd9baf 100644 --- a/util/logutil/slow_query_logger.go +++ b/util/logutil/slow_query_logger.go @@ -18,6 +18,9 @@ func newSlowQueryLogger(cfg *LogConfig) (*zap.Logger, *log.ZapProperties, error) // copy global config and override slow query log file // if slow query log filename is empty, slow query log will behave the same as global log sqConfig := cfg.Config + // level of the global log config doesn't affect the slow query logger which determines whether to + // log by execution duration. + sqConfig.Level = LogConfig{}.Level if len(cfg.SlowQueryFile) != 0 { sqConfig.File = log.FileLogConfig{ MaxSize: cfg.File.MaxSize,