1 Star 0 Fork 1

winie/sq

forked from unsafe-rust/sq 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
1_logger.go 1.89 KB
一键复制 编辑 原始数据 按行查看 历史
unsafe-rust 提交于 2021-03-28 17:36 . update
package sq
import (
"fmt"
"log"
"os"
"regexp"
"strings"
"time"
)
const (
fmtLogQuery = `Sql: %s`
fmtLogArgs = `Args: %#v`
fmtLogError = `Error: %v`
fmtLogTimeTaken = `Time: %0.5fs`
)
var (
reInvisibleChars = regexp.MustCompile(`[\s\r\n\t]+`)
)
// QueryStatus 表示查询执行后的状态。
type QueryStatus struct {
Sql string
Args interface{}
Start time.Time
End time.Time
Err error
}
// String 返回格式化的日志消息。
func (q *QueryStatus) String() string {
lines := make([]string, 0, 8)
if query := q.Sql; query != "" {
query = reInvisibleChars.ReplaceAllString(query, ` `)
query = strings.TrimSpace(query)
lines = append(lines, fmt.Sprintf(fmtLogQuery, query))
}
if args, ok := q.Args.([]interface{}); ok && len(args) == 0 {
q.Args = nil
}
if q.Args != nil {
lines = append(lines, fmt.Sprintf(fmtLogArgs, q.Args))
}
if q.Err != nil {
lines = append(lines, fmt.Sprintf(fmtLogError, q.Err))
}
lines = append(lines, fmt.Sprintf(fmtLogTimeTaken, float64(q.End.UnixNano()-q.Start.UnixNano())/float64(1e9)))
return strings.Join(lines, "\n")
}
// ILogger 表示一个日志收集器.
// 您可以将日志收集器传递给 sq.SetLogger(myCollector),以使其在执行查询后收集QueryStatus消息。
type ILogger interface {
Printf(format string, v ...interface{})
}
type defaultLogger struct {
logging bool
log ILogger
}
func (d *defaultLogger) Log(m *QueryStatus, show bool) {
if d.logging || show {
d.log.Printf("\n\t%s\n\n", strings.Replace(m.String(), "\n", "\n\t", -1))
}
}
func (d *defaultLogger) SetLogging(logging bool) {
d.logging = logging
}
var logger = &defaultLogger{log: log.New(os.Stderr, "", log.LstdFlags)}
// SetLogger 设置日志器。
func SetLogger(l ILogger) {
logger.log = l
}
// SetLogging 是否打印日志,<print>为true,则打印日志。
func SetLogging(print bool) {
logger.logging = print
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/winie_admin/sq.git
git@gitee.com:winie_admin/sq.git
winie_admin
sq
sq
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385