This commit is contained in:
Leo 2015-11-26 07:53:30 +00:00
commit b7b75a00f9
1 changed files with 31 additions and 3 deletions

View File

@ -8,12 +8,14 @@ import (
"bufio" "bufio"
"bytes" "bytes"
"database/sql" "database/sql"
"database/sql/driver"
"encoding/gob" "encoding/gob"
"errors" "errors"
"fmt" "fmt"
"io" "io"
"os" "os"
"reflect" "reflect"
"regexp"
"strconv" "strconv"
"strings" "strings"
"sync" "sync"
@ -51,6 +53,8 @@ type Engine struct {
disableGlobalCache bool disableGlobalCache bool
} }
var sqlRegexp = regexp.MustCompile(`(\$\d+)|\?`)
func (engine *Engine) SetLogger(logger core.ILogger) { func (engine *Engine) SetLogger(logger core.ILogger) {
engine.Logger = logger engine.Logger = logger
engine.dialect.SetLogger(logger) engine.dialect.SetLogger(logger)
@ -197,10 +201,34 @@ func (engine *Engine) logSQL(sqlStr string, sqlArgs ...interface{}) {
if engine.ShowSQL { if engine.ShowSQL {
engine.overrideLogLevel(core.LOG_INFO) engine.overrideLogLevel(core.LOG_INFO)
if len(sqlArgs) > 0 { if len(sqlArgs) > 0 {
engine.Logger.Infof("[sql] %v [args] %v", sqlStr, sqlArgs) // format sql args
} else { var formatedSqlArgs []interface{}
engine.Logger.Infof("[sql] %v", sqlStr) for _, value := range sqlArgs {
indirectValue := reflect.Indirect(reflect.ValueOf(value))
if indirectValue.IsValid() {
value = indirectValue.Interface()
if t, ok := value.(time.Time); ok {
formatedSqlArgs = append(formatedSqlArgs, fmt.Sprintf("'%v'", t.Format(time.RFC3339)))
} else if b, ok := value.([]byte); ok {
formatedSqlArgs = append(formatedSqlArgs, fmt.Sprintf("'%v'", string(b)))
} else if r, ok := value.(driver.Valuer); ok {
if value, err := r.Value(); err == nil && value != nil {
formatedSqlArgs = append(formatedSqlArgs, fmt.Sprintf("'%v'", value))
} else {
formatedSqlArgs = append(formatedSqlArgs, "NULL")
}
} else {
formatedSqlArgs = append(formatedSqlArgs, fmt.Sprintf("'%v'", value))
}
} else {
formatedSqlArgs = append(formatedSqlArgs, fmt.Sprintf("'%v'", value))
}
}
sqlStr = fmt.Sprintf(sqlRegexp.ReplaceAllString(sqlStr, "%v"), formatedSqlArgs...)
} }
engine.Logger.Infof("[sql] %v", sqlStr)
} }
} }