diff --git a/config.go b/config.go
index d60b2e5b06caf3e77ebdd9000c03f76c2e9c1b9e..4735aa67325315f138441aef689826a8d3f71970 100644
--- a/config.go
+++ b/config.go
@@ -21,13 +21,14 @@ type Settings interface {
 type conf struct {
 	loggingEnabled uint32
 	queryLogger    atomic.Value
+	defaultLogger  defaultLogger
 }
 
 func (c *conf) Logger() Logger {
 	if lg := c.queryLogger.Load(); lg != nil {
 		return lg.(Logger)
 	}
-	return nil
+	return &c.defaultLogger
 }
 
 func (c *conf) SetLogger(lg Logger) {
diff --git a/logger.go b/logger.go
index 9ecda4846b5c96651ff27810880232a25fb92fad..f346598ea6ab8d94df698688ce184a73caf844cc 100644
--- a/logger.go
+++ b/logger.go
@@ -19,6 +19,11 @@ const (
 	fmtLogTimeTaken    = `Time taken:     %0.5fs`
 )
 
+var (
+	reInvisibleChars       = regexp.MustCompile(`[\s\r\n\t]+`)
+	reColumnCompareExclude = regexp.MustCompile(`[^a-zA-Z0-9]`)
+)
+
 // QueryStatus represents a query after being executed.
 type QueryStatus struct {
 	SessID uint64
@@ -91,7 +96,6 @@ const (
 
 func init() {
 	if envEnabled(EnvEnableDebug) {
-		Conf.SetLogger(&defaultLogger{}) // Using default logger.
 		Conf.SetLogging(true)
 	}
 }
@@ -105,22 +109,14 @@ type Logger interface {
 
 // Log sends a query status report to the configured logger.
 func Log(m *QueryStatus) {
-	logger := Conf.Logger()
-	if logger == nil {
-		logger = &defaultLogger{}
-		Conf.SetLogger(logger)
-	}
-	logger.Log(m)
+	Conf.Logger().Log(m)
 }
 
-var (
-	reInvisibleChars       = regexp.MustCompile(`[\s\r\n\t]+`)
-	reColumnCompareExclude = regexp.MustCompile(`[^a-zA-Z0-9]`)
-)
-
 type defaultLogger struct {
 }
 
 func (lg *defaultLogger) Log(m *QueryStatus) {
 	log.Printf("\n\t%s\n\n", strings.Replace(m.String(), "\n", "\n\t", -1))
 }
+
+var _ = Logger(&defaultLogger{})