Skip to content

Commit

Permalink
Merge pull request #1 from omigo/develop
Browse files Browse the repository at this point in the history
Cost
  • Loading branch information
omigo authored Aug 19, 2020
2 parents 0888823 + 79b02c6 commit bc59be8
Show file tree
Hide file tree
Showing 12 changed files with 70 additions and 54 deletions.
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,30 +21,30 @@ func main() {
log.Debugf("this is a test message, %d", 1111)

format := fmt.Sprintf("%s %s %s %s:%d %s", "2006-01-02 15:04:05.000000", log.TagToken,
log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
log.SetFormat(format)
log.Tinfof("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "this is a test message, %d", 1111)

format = fmt.Sprintf(`{"date": "%s", "time": "%s", "level": "%s", "file": "%s", "line": %d, "log": "%s"}`,
"2006-01-02", "15:04:05.999", log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
"2006-01-02", "15:04:05.999", log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
log.SetFormat(format)
log.Infof("this is a test message, %d", 1111)

format = fmt.Sprintf(`<log><date>%s</date><time>%s</time><level>%s</level><file>%s</file><line>%d</line><msg>%s</msg><log>`,
"2006-01-02", "15:04:05.000", log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
"2006-01-02", "15:04:05.000", log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
log.SetFormat(format)
log.Tinfof("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "this is a test message, %d", 1111)
}
```
日志输出:
```
2016-01-16 20:28:34 debug examples/main.go:10 this is a test message, 1111
2016-01-16 20:28:34.280601 6ba7b814-9dad-11d1-80b4-00c04fd430c8 info examples/main.go:15 this is a test message, 1111
{"date": "2016-01-16", "time": "20:28:34.28", "level": "info", "file": "examples/main.go", "line": 20, "log": "this is a test message, 1111"}
<log><date>2016-01-16</date><time>20:28:34.280</time><level>info</level><file>examples/main.go</file><line>25</line><msg>this is a test message, 1111</msg><log>
2016-01-16 20:28:34 debug main.go:10 this is a test message, 1111
2016-01-16 20:28:34.280601 6ba7b814-9dad-11d1-80b4-00c04fd430c8 info main.go:15 this is a test message, 1111
{"date": "2016-01-16", "time": "20:28:34.28", "level": "info", "file": "main.go", "line": 20, "log": "this is a test message, 1111"}
<log><date>2016-01-16</date><time>20:28:34.280</time><level>info</level><file>main.go</file><line>25</line><msg>this is a test message, 1111</msg><log>
```

更多用法 [examples](examples/main.go)
更多用法 [examples](main.go)
着色示例 ![color.png](color.png)

Go Doc and API
Expand Down
12 changes: 0 additions & 12 deletions examples/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,6 @@ func execSourceFileExamples() {
log.SetFormat(format)
log.Infof("this is a test message, %d", 11)

// 包
format = fmt.Sprintf("%s %s %s %s:%d %s", "2006-1-2", "3:4:05.000",
log.LevelToken, log.PackageToken, log.LineToken, log.MessageToken)
log.SetFormat(format)
log.Infof("this is a test message, %d", 12)

// 项目
format = fmt.Sprintf("%s %s %s %s:%d %s", "2006-1-2", "3:4:05.000",
log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
log.SetFormat(format)
log.Infof("this is a test message, %d", 13)

// 文件
format = fmt.Sprintf("%s %s %s %s:%d %s", "2006-1-2", "3:4:05.000",
log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
Expand Down
4 changes: 2 additions & 2 deletions examples/format.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ func execFormatExamples() {

// 自定义 json 格式的日志
format = fmt.Sprintf(`{"date": "%s", "time": "%s", "level": "%s", "file": "%s", "line": %d, "log": "%s"}`,
"2006-01-02", "15:04:05.999", log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
"2006-01-02", "15:04:05.999", log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
log.SetFormat(format)
log.Infof("this is a test message, %d", 9)

// 自定义 xml 格式的日志
format = fmt.Sprintf(`<log><date>%s</date><time>%s</time><tid>%s</tid><level>%s</level><file>%s</file><line>%d</line><msg>%s</msg><log>`,
"2006-01-02", "15:04:05.000", log.TagToken, log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
"2006-01-02", "15:04:05.000", log.TagToken, log.LevelToken, log.PathToken, log.LineToken, log.MessageToken)
log.SetFormat(format)
log.Tinfof("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "this is a test message, %d", 10)
}
6 changes: 2 additions & 4 deletions format.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,16 @@ const (
LevelToken string = "info"
TagToken = "tag"
PathToken = "/go/src/github.com/omigo/log/examples/main.go"
PackageToken = "github.com/omigo/log/examples/main.go"
ProjectToken = "examples/main.go"
FileToken = "main.go"
LineToken int = 88
MessageToken string = "message"
)

// DefaultFormat 默认日志格式
const DefaultFormat = "2006-01-02 15:04:05.000 info examples/main.go:88 message"
const DefaultFormat = "2006-01-02 15:04:05 info main.go:88 message"

// DefaultFormatTag 默认日志格式带标签
const DefaultFormatTag = "2006-01-02 15:04:05.000 tag info examples/main.go:88 message"
const DefaultFormatTag = "2006-01-02 15:04:05 tag info examples/main.go:88 message"

// ExtactDateTime 抽取日期和时间格式字符串串
func ExtactDateTime(format string) (dateFmt, timeFmt string) {
Expand Down
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module github.com/omigo/log

go 1.15
19 changes: 19 additions & 0 deletions log.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package log
import (
"encoding/json"
"io"
"time"
)

// 默认 debug 级别,方便调试,生产环境可以调用 LevelSet 设置 log 级别
Expand Down Expand Up @@ -216,3 +217,21 @@ func JSONIndent(m ...interface{}) {
std.Tprintf(Ldebug, "", "%s", js)
}
}

func Cost(m string) func() {
std.Tprintf(Linfo, "", "%s start...", m)
start := time.Now()
return func() {
std.Tprintf(Linfo, "", "%s cost %s", m,
time.Now().Sub(start).Truncate(time.Second))
}
}

func Costf(format, m string) func() {
std.Tprintf(Linfo, "", format+" start...", m)
start := time.Now()
return func() {
std.Tprintf(Linfo, "", format+" cost %s", m,
time.Now().Sub(start).Truncate(time.Second))
}
}
9 changes: 8 additions & 1 deletion log_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func TestSetWriter(t *testing.T) {

func TestSetFormat(t *testing.T) {
format := fmt.Sprintf(`<log><date>%s</date><time>%s</time><level>%s</level><file>%s</file><line>%d</line><msg>%s</msg><log>`,
"2006-01-02", "15:04:05.000", LevelToken, ProjectToken, LineToken, MessageToken)
"2006-01-02", "15:04:05.000", LevelToken, PathToken, LineToken, MessageToken)
SetFormat(format)

buf := bytes.NewBuffer(make([]byte, 4096))
Expand Down Expand Up @@ -122,3 +122,10 @@ func TestFormatLogWithTag(t *testing.T) {
Printf("%d %s", Lprint, Lprint)
Stackf("%d %s", Lstack, Lstack)
}

func TestCost(t *testing.T) {
defer Cost("something")()

time.Sleep(time.Second)
Info("do do do")
}
14 changes: 7 additions & 7 deletions package.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,27 @@ log 实现了一个像 slf4j(Simple Logging Facade for Java)
log.Debugf("this is a test message, %d", 1111)
format := fmt.Sprintf("%s %s %s %s:%d %s", "2006-01-02 15:04:05.000000", log.TagToken,
log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
log.SetFormat(format)
log.Tinfof("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "this is a test message, %d", 1111)
format = fmt.Sprintf(`{"date": "%s", "time": "%s", "level": "%s", "file": "%s", "line": %d, "log": "%s"}`,
"2006-01-02", "15:04:05.999", log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
"2006-01-02", "15:04:05.999", log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
log.SetFormat(format)
log.Infof("this is a test message, %d", 1111)
format = fmt.Sprintf(`<log><date>%s</date><time>%s</time><level>%s</level><file>%s</file><line>%d</line><msg>%s</msg><log>`,
"2006-01-02", "15:04:05.000", log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
"2006-01-02", "15:04:05.000", log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
log.SetFormat(format)
log.Tinfof("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "this is a test message, %d", 1111)
}
日志输出:
2016-01-16 20:28:34 debug examples/main.go:10 this is a test message, 1111
2016-01-16 20:28:34.280601 6ba7b814-9dad-11d1-80b4-00c04fd430c8 info examples/main.go:15 this is a test message, 1111
{"date": "2016-01-16", "time": "20:28:34.28", "level": "info", "file": "examples/main.go", "line": 20, "log": "this is a test message, 1111"}
<log><date>2016-01-16</date><time>20:28:34.280</time><level>info</level><file>examples/main.go</file><line>25</line><msg>this is a test message, 1111</msg><log>
2016-01-16 20:28:34 debug main.go:10 this is a test message, 1111
2016-01-16 20:28:34.280601 6ba7b814-9dad-11d1-80b4-00c04fd430c8 info main.go:15 this is a test message, 1111
{"date": "2016-01-16", "time": "20:28:34.28", "level": "info", "file": "main.go", "line": 20, "log": "this is a test message, 1111"}
<log><date>2016-01-16</date><time>20:28:34.280</time><level>info</level><file>main.go</file><line>25</line><msg>this is a test message, 1111</msg><log>
*/
package log
2 changes: 1 addition & 1 deletion printer.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (

func init() {
// 默认实现标准格式标准输出
SetPrinter(NewStandard(os.Stdout, DefaultFormatTag))
SetPrinter(NewStandard(os.Stdout, DefaultFormat))
}

// Printer 定义了打印接口
Expand Down
20 changes: 7 additions & 13 deletions standard.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ type record struct {
Date, Time string
Tag string
Level string
Path string
File string
Line int
Message string
Expand Down Expand Up @@ -113,17 +114,12 @@ func (s *Standard) Tprintf(l Level, tag string, format string, m ...interface{})
}

var ok bool
_, r.File, r.Line, ok = runtime.Caller(2) // expensive
_, r.Path, r.Line, ok = runtime.Caller(2) // expensive
if ok {
if i := strings.LastIndex(r.File, "/github.com/"); i > -1 {
r.File = r.File[i+12:]
if i = strings.Index(r.File, "/"); i > -1 {
r.File = r.File[i+1:]
}
} else if i := strings.LastIndex(r.File, "/vendor/"); i > -1 {
r.File = r.File[i+8:]
} else if i := strings.LastIndex(r.File, "/src/"); i > -1 {
r.File = r.File[i+5:]
if i := strings.LastIndexByte(r.Path, '/'); i > -1 {
r.File = r.Path[i+1:]
} else {
r.File = r.Path
}
} else {
r.File = "???"
Expand Down Expand Up @@ -185,9 +181,7 @@ func (s *Standard) Tprintf(l Level, tag string, format string, m ...interface{})
// 格式解析,把格式串替换成 token 串
func parseFormat(format string, dateFmt, timeFmt string) (pattern string) {
// 顺序最好不要变,从最长的开始匹配
pattern = strings.Replace(format, PathToken, "{{ .File }}", -1)
pattern = strings.Replace(pattern, PackageToken, "{{ .File }}", -1)
pattern = strings.Replace(pattern, ProjectToken, "{{ .File }}", -1)
pattern = strings.Replace(format, PathToken, "{{ .Path }}", -1)
pattern = strings.Replace(pattern, FileToken, "{{ .File }}", -1)
pattern = strings.Replace(pattern, TagToken, "{{ .Tag }}", -1)
pattern = strings.Replace(pattern, LevelToken, "{{ .Level }}", -1)
Expand Down
6 changes: 3 additions & 3 deletions test/deeper/log_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ func TestDefaultFormat(t *testing.T) {

msg := "this is a test message"
log.Info(msg)
if ok, _ := regexp.Match(`\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d+ -? ?info .*test/deeper/log_test.go:\d+ this is a test message`, buf.Bytes()); !ok {
t.Logf("%s", buf.Bytes()) // 2016-01-24 19:41:19 info test/deeper/log_test.go:16 this is a test message
if ok, _ := regexp.Match(`\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} info log_test.go:\d+ this is a test message`, buf.Bytes()); !ok {
t.Logf("%s", buf.Bytes()) // 2016-01-24 19:41:19 info log_test.go:16 this is a test message
t.FailNow()
}
}

func TestSetFormatFile(t *testing.T) {
format := fmt.Sprintf(`<log><date>%s</date><time>%s</time><level>%s</level><file>%s</file><line>%d</line><msg>%s</msg><log>`,
"2006-01-02", "15:04:05.000", log.LevelToken, log.PackageToken, log.LineToken, log.MessageToken)
"2006-01-02", "15:04:05.000", log.LevelToken, log.PathToken, log.LineToken, log.MessageToken)
log.SetFormat(format)

buf := bytes.NewBuffer(make([]byte, 4096))
Expand Down
13 changes: 10 additions & 3 deletions test/log_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,16 @@ func TestDefaultFormatFile(t *testing.T) {
log.Info(msg)
// 2016-07-06 11:54:39 - info test/log_test.go:18 this is a test message
if ok, _ := regexp.Match(
`\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ -? ?info .*test/log_test.go:\d+ this is a test message`,
`\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} info log_test.go:\d+ this is a test message`,
buf.Bytes()); !ok {
t.Logf("%s", buf.Bytes()) // 2016-01-24 19:41:19 info test/log_test.go:16 this is a test message
t.Logf("%s", buf.Bytes()) // 2016-01-24 19:41:19 info log_test.go:16 this is a test message
t.FailNow()
}
}

func TestSetFormatFile(t *testing.T) {
format := fmt.Sprintf(`<log><date>%s</date><time>%s</time><level>%s</level><file>%s</file><line>%d</line><msg>%s</msg><log>`,
"2006-01-02", "15:04:05.000", log.LevelToken, log.PackageToken, log.LineToken, log.MessageToken)
"2006-01-02", "15:04:05.000", log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
log.SetFormat(format)

buf := bytes.NewBuffer(make([]byte, 4096))
Expand All @@ -41,3 +41,10 @@ func TestSetFormatFile(t *testing.T) {

log.SetFormat(log.DefaultFormat)
}

func TestCost(t *testing.T) {
defer log.Cost("something")()

time.Sleep(time.Second)
log.Info("do do do")
}

0 comments on commit bc59be8

Please sign in to comment.