Better default logger

This commit is contained in:
Jinzhu 2013-11-11 17:16:15 +08:00
parent 32562b5537
commit f2c7beb19f
2 changed files with 39 additions and 8 deletions

2
do.go
View File

@ -626,7 +626,7 @@ func (s *Do) whereSql() (sql string) {
var primary_condiations, and_conditions, or_conditions []string
if !s.unscoped && s.model.hasColumn("DeletedAt") {
primary_condiations = append(primary_condiations, "(deleted_at is null or deleted_at <= '0001-01-02')")
primary_condiations = append(primary_condiations, "(deleted_at IS NULL OR deleted_at <= '0001-01-02')")
}
if !s.model.primaryKeyZero() {

View File

@ -5,6 +5,7 @@ import (
"log"
"os"
"regexp"
"time"
)
@ -12,14 +13,44 @@ type Logger interface {
Print(v ...interface{})
}
type defaultLogger struct {
*log.Logger
}
func (logger defaultLogger) Print(v ...interface{}) {
if len(v) > 1 {
level := v[0]
tim := "\033[33m[" + time.Now().Format("2006-01-02 15:04:05") + "]\033[0m"
if level == "sql" {
dur := v[1]
sql := fmt.Sprintf(regexp.MustCompile(`(\$\d+)|\?`).ReplaceAllString(v[2].(string), "'%v'"), v[3].([]interface{})...)
dur = fmt.Sprintf(" \033[36;1m[%.2fms]\033[0m ", float64(dur.(time.Duration).Nanoseconds()/1e4)/100.0)
logger.Println(tim, dur, sql)
} else {
messages := []interface{}{"\033[31m"}
messages = append(messages, v...)
messages = append(messages, "\033[0m")
logger.Println(messages...)
}
}
}
var default_logger defaultLogger
func init() {
// default_logger = log.New(os.Stdout, "\r\n", 0)
default_logger = defaultLogger{log.New(os.Stdout, "\r\n", 0)}
}
func (s *Chain) print(level string, v ...interface{}) {
if s.d.log_mode || s.debug_mode || level == "debug" {
if _, ok := s.d.logger.(Logger); !ok {
fmt.Println("logger haven't been set, using os.Stdout")
s.d.logger = log.New(os.Stdout, "", 0)
s.d.logger = default_logger
}
args := []interface{}{level}
s.d.logger.(Logger).Print(append(args, v...))
s.d.logger.(Logger).Print(append(args, v...)...)
}
}
@ -28,7 +59,7 @@ func (s *Chain) warn(v ...interface{}) {
}
func (s *Chain) slog(sql string, t time.Time, vars ...interface{}) {
go s.print("sql", time.Now().Sub(t), fmt.Sprintf(regexp.MustCompile(`\$\d|\?`).ReplaceAllString(sql, "'%v'"), vars...))
go s.print("sql", time.Now().Sub(t), sql, vars)
}
func (s *Chain) debug(v ...interface{}) {