Add context to logger
This commit is contained in:
		
							parent
							
								
									9dfed613db
								
							
						
					
					
						commit
						8def7be583
					
				
							
								
								
									
										11
									
								
								callbacks.go
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								callbacks.go
									
									
									
									
									
								
							| @ -1,6 +1,7 @@ | |||||||
| package gorm | package gorm | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"context" | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"reflect" | 	"reflect" | ||||||
| @ -90,7 +91,7 @@ func (p *processor) Execute(db *DB) { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if stmt := db.Statement; stmt != nil { | 	if stmt := db.Statement; stmt != nil { | ||||||
| 		db.Logger.Trace(curTime, func() (string, int64) { | 		db.Logger.Trace(stmt.Context, curTime, func() (string, int64) { | ||||||
| 			return db.Dialector.Explain(stmt.SQL.String(), stmt.Vars...), db.RowsAffected | 			return db.Dialector.Explain(stmt.SQL.String(), stmt.Vars...), db.RowsAffected | ||||||
| 		}, db.Error) | 		}, db.Error) | ||||||
| 
 | 
 | ||||||
| @ -141,7 +142,7 @@ func (p *processor) compile() (err error) { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if p.fns, err = sortCallbacks(p.callbacks); err != nil { | 	if p.fns, err = sortCallbacks(p.callbacks); err != nil { | ||||||
| 		logger.Default.Error("Got error when compile callbacks, got %v", err) | 		logger.Default.Error(context.Background(), "Got error when compile callbacks, got %v", err) | ||||||
| 	} | 	} | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| @ -164,7 +165,7 @@ func (c *callback) Register(name string, fn func(*DB)) error { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *callback) Remove(name string) error { | func (c *callback) Remove(name string) error { | ||||||
| 	logger.Default.Warn("removing callback `%v` from %v\n", name, utils.FileWithLineNum()) | 	logger.Default.Warn(context.Background(), "removing callback `%v` from %v\n", name, utils.FileWithLineNum()) | ||||||
| 	c.name = name | 	c.name = name | ||||||
| 	c.remove = true | 	c.remove = true | ||||||
| 	c.processor.callbacks = append(c.processor.callbacks, c) | 	c.processor.callbacks = append(c.processor.callbacks, c) | ||||||
| @ -172,7 +173,7 @@ func (c *callback) Remove(name string) error { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *callback) Replace(name string, fn func(*DB)) error { | func (c *callback) Replace(name string, fn func(*DB)) error { | ||||||
| 	logger.Default.Info("replacing callback `%v` from %v\n", name, utils.FileWithLineNum()) | 	logger.Default.Info(context.Background(), "replacing callback `%v` from %v\n", name, utils.FileWithLineNum()) | ||||||
| 	c.name = name | 	c.name = name | ||||||
| 	c.handler = fn | 	c.handler = fn | ||||||
| 	c.replace = true | 	c.replace = true | ||||||
| @ -199,7 +200,7 @@ func sortCallbacks(cs []*callback) (fns []func(*DB), err error) { | |||||||
| 	for _, c := range cs { | 	for _, c := range cs { | ||||||
| 		// show warning message the callback name already exists
 | 		// show warning message the callback name already exists
 | ||||||
| 		if idx := getRIndex(names, c.name); idx > -1 && !c.replace && !c.remove && !cs[idx].remove { | 		if idx := getRIndex(names, c.name); idx > -1 && !c.replace && !c.remove && !cs[idx].remove { | ||||||
| 			logger.Default.Warn("duplicated callback `%v` from %v\n", c.name, utils.FileWithLineNum()) | 			logger.Default.Warn(context.Background(), "duplicated callback `%v` from %v\n", c.name, utils.FileWithLineNum()) | ||||||
| 		} | 		} | ||||||
| 		names = append(names, c.name) | 		names = append(names, c.name) | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| package logger | package logger | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"context" | ||||||
| 	"log" | 	"log" | ||||||
| 	"os" | 	"os" | ||||||
| 	"time" | 	"time" | ||||||
| @ -46,10 +47,10 @@ type Config struct { | |||||||
| // Interface logger interface
 | // Interface logger interface
 | ||||||
| type Interface interface { | type Interface interface { | ||||||
| 	LogMode(LogLevel) Interface | 	LogMode(LogLevel) Interface | ||||||
| 	Info(string, ...interface{}) | 	Info(context.Context, string, ...interface{}) | ||||||
| 	Warn(string, ...interface{}) | 	Warn(context.Context, string, ...interface{}) | ||||||
| 	Error(string, ...interface{}) | 	Error(context.Context, string, ...interface{}) | ||||||
| 	Trace(begin time.Time, fc func() (string, int64), err error) | 	Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var Default = New(log.New(os.Stdout, "\r\n", log.LstdFlags), Config{ | var Default = New(log.New(os.Stdout, "\r\n", log.LstdFlags), Config{ | ||||||
| @ -103,35 +104,35 @@ func (l logger) LogMode(level LogLevel) Interface { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Info print info
 | // Info print info
 | ||||||
| func (l logger) Info(msg string, data ...interface{}) { | func (l logger) Info(ctx context.Context, msg string, data ...interface{}) { | ||||||
| 	if l.LogLevel >= Info { | 	if l.LogLevel >= Info { | ||||||
| 		l.Printf(l.infoStr+msg, append([]interface{}{utils.FileWithLineNum()}, data...)...) | 		l.Printf(l.infoStr+msg, append([]interface{}{utils.FileWithLineNum()}, data...)...) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Warn print warn messages
 | // Warn print warn messages
 | ||||||
| func (l logger) Warn(msg string, data ...interface{}) { | func (l logger) Warn(ctx context.Context, msg string, data ...interface{}) { | ||||||
| 	if l.LogLevel >= Warn { | 	if l.LogLevel >= Warn { | ||||||
| 		l.Printf(l.warnStr+msg, append([]interface{}{utils.FileWithLineNum()}, data...)...) | 		l.Printf(l.warnStr+msg, append([]interface{}{utils.FileWithLineNum()}, data...)...) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Error print error messages
 | // Error print error messages
 | ||||||
| func (l logger) Error(msg string, data ...interface{}) { | func (l logger) Error(ctx context.Context, msg string, data ...interface{}) { | ||||||
| 	if l.LogLevel >= Error { | 	if l.LogLevel >= Error { | ||||||
| 		l.Printf(l.errStr+msg, append([]interface{}{utils.FileWithLineNum()}, data...)...) | 		l.Printf(l.errStr+msg, append([]interface{}{utils.FileWithLineNum()}, data...)...) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Trace print sql message
 | // Trace print sql message
 | ||||||
| func (l logger) Trace(begin time.Time, fc func() (string, int64), err error) { | func (l logger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) { | ||||||
| 	if l.LogLevel > 0 { | 	if l.LogLevel > 0 { | ||||||
| 		elapsed := time.Now().Sub(begin) | 		elapsed := time.Now().Sub(begin) | ||||||
| 		switch { | 		switch { | ||||||
| 		case err != nil: | 		case err != nil: | ||||||
| 			sql, rows := fc() | 			sql, rows := fc() | ||||||
| 			l.Printf(l.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, rows, sql) | 			l.Printf(l.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, rows, sql) | ||||||
| 		case elapsed > l.SlowThreshold && l.SlowThreshold != 0: | 		case elapsed > l.SlowThreshold && l.SlowThreshold != 0 && l.LogLevel >= Warn: | ||||||
| 			sql, rows := fc() | 			sql, rows := fc() | ||||||
| 			l.Printf(l.traceWarnStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, rows, sql) | 			l.Printf(l.traceWarnStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, rows, sql) | ||||||
| 		case l.LogLevel >= Info: | 		case l.LogLevel >= Info: | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| package schema | package schema | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"context" | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"go/ast" | 	"go/ast" | ||||||
| @ -83,7 +84,7 @@ func Parse(dest interface{}, cacheStore *sync.Map, namer Namer) (*Schema, error) | |||||||
| 
 | 
 | ||||||
| 	defer func() { | 	defer func() { | ||||||
| 		if schema.err != nil { | 		if schema.err != nil { | ||||||
| 			logger.Default.Error(schema.err.Error()) | 			logger.Default.Error(context.Background(), schema.err.Error()) | ||||||
| 			cacheStore.Delete(modelType) | 			cacheStore.Delete(modelType) | ||||||
| 		} | 		} | ||||||
| 	}() | 	}() | ||||||
| @ -174,7 +175,7 @@ func Parse(dest interface{}, cacheStore *sync.Map, namer Namer) (*Schema, error) | |||||||
| 			case "func(*gorm.DB)": // TODO hack
 | 			case "func(*gorm.DB)": // TODO hack
 | ||||||
| 				reflect.Indirect(reflect.ValueOf(schema)).FieldByName(name).SetBool(true) | 				reflect.Indirect(reflect.ValueOf(schema)).FieldByName(name).SetBool(true) | ||||||
| 			default: | 			default: | ||||||
| 				logger.Default.Warn("Model %v don't match %vInterface, should be %v(*gorm.DB)", schema, name, name) | 				logger.Default.Warn(context.Background(), "Model %v don't match %vInterface, should be %v(*gorm.DB)", schema, name, name) | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu