Skip to content

Commit bc59be8

Browse files
authored
Merge pull request #1 from omigo/develop
Cost
2 parents 0888823 + 79b02c6 commit bc59be8

File tree

12 files changed

+70
-54
lines changed

12 files changed

+70
-54
lines changed

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,30 @@ func main() {
2121
log.Debugf("this is a test message, %d", 1111)
2222

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

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

3333
format = fmt.Sprintf(`<log><date>%s</date><time>%s</time><level>%s</level><file>%s</file><line>%d</line><msg>%s</msg><log>`,
34-
"2006-01-02", "15:04:05.000", log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
34+
"2006-01-02", "15:04:05.000", log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
3535
log.SetFormat(format)
3636
log.Tinfof("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "this is a test message, %d", 1111)
3737
}
3838
```
3939
日志输出:
4040
```
41-
2016-01-16 20:28:34 debug examples/main.go:10 this is a test message, 1111
42-
2016-01-16 20:28:34.280601 6ba7b814-9dad-11d1-80b4-00c04fd430c8 info examples/main.go:15 this is a test message, 1111
43-
{"date": "2016-01-16", "time": "20:28:34.28", "level": "info", "file": "examples/main.go", "line": 20, "log": "this is a test message, 1111"}
44-
<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>
41+
2016-01-16 20:28:34 debug main.go:10 this is a test message, 1111
42+
2016-01-16 20:28:34.280601 6ba7b814-9dad-11d1-80b4-00c04fd430c8 info main.go:15 this is a test message, 1111
43+
{"date": "2016-01-16", "time": "20:28:34.28", "level": "info", "file": "main.go", "line": 20, "log": "this is a test message, 1111"}
44+
<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>
4545
```
4646

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

5050
Go Doc and API

examples/file.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,6 @@ func execSourceFileExamples() {
1313
log.SetFormat(format)
1414
log.Infof("this is a test message, %d", 11)
1515

16-
// 包
17-
format = fmt.Sprintf("%s %s %s %s:%d %s", "2006-1-2", "3:4:05.000",
18-
log.LevelToken, log.PackageToken, log.LineToken, log.MessageToken)
19-
log.SetFormat(format)
20-
log.Infof("this is a test message, %d", 12)
21-
22-
// 项目
23-
format = fmt.Sprintf("%s %s %s %s:%d %s", "2006-1-2", "3:4:05.000",
24-
log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
25-
log.SetFormat(format)
26-
log.Infof("this is a test message, %d", 13)
27-
2816
// 文件
2917
format = fmt.Sprintf("%s %s %s %s:%d %s", "2006-1-2", "3:4:05.000",
3018
log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)

examples/format.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ func execFormatExamples() {
2222

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

2929
// 自定义 xml 格式的日志
3030
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>`,
31-
"2006-01-02", "15:04:05.000", log.TagToken, log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
31+
"2006-01-02", "15:04:05.000", log.TagToken, log.LevelToken, log.PathToken, log.LineToken, log.MessageToken)
3232
log.SetFormat(format)
3333
log.Tinfof("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "this is a test message, %d", 10)
3434
}

format.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,16 @@ const (
1010
LevelToken string = "info"
1111
TagToken = "tag"
1212
PathToken = "/go/src/github.com/omigo/log/examples/main.go"
13-
PackageToken = "github.com/omigo/log/examples/main.go"
14-
ProjectToken = "examples/main.go"
1513
FileToken = "main.go"
1614
LineToken int = 88
1715
MessageToken string = "message"
1816
)
1917

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

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

2624
// ExtactDateTime 抽取日期和时间格式字符串串
2725
func ExtactDateTime(format string) (dateFmt, timeFmt string) {

go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module github.com/omigo/log
2+
3+
go 1.15

log.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package log
33
import (
44
"encoding/json"
55
"io"
6+
"time"
67
)
78

89
// 默认 debug 级别,方便调试,生产环境可以调用 LevelSet 设置 log 级别
@@ -216,3 +217,21 @@ func JSONIndent(m ...interface{}) {
216217
std.Tprintf(Ldebug, "", "%s", js)
217218
}
218219
}
220+
221+
func Cost(m string) func() {
222+
std.Tprintf(Linfo, "", "%s start...", m)
223+
start := time.Now()
224+
return func() {
225+
std.Tprintf(Linfo, "", "%s cost %s", m,
226+
time.Now().Sub(start).Truncate(time.Second))
227+
}
228+
}
229+
230+
func Costf(format, m string) func() {
231+
std.Tprintf(Linfo, "", format+" start...", m)
232+
start := time.Now()
233+
return func() {
234+
std.Tprintf(Linfo, "", format+" cost %s", m,
235+
time.Now().Sub(start).Truncate(time.Second))
236+
}
237+
}

log_test.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func TestSetWriter(t *testing.T) {
3131

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

3737
buf := bytes.NewBuffer(make([]byte, 4096))
@@ -122,3 +122,10 @@ func TestFormatLogWithTag(t *testing.T) {
122122
Printf("%d %s", Lprint, Lprint)
123123
Stackf("%d %s", Lstack, Lstack)
124124
}
125+
126+
func TestCost(t *testing.T) {
127+
defer Cost("something")()
128+
129+
time.Sleep(time.Second)
130+
Info("do do do")
131+
}

package.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,27 @@ log 实现了一个像 slf4j(Simple Logging Facade for Java)
1616
log.Debugf("this is a test message, %d", 1111)
1717
1818
format := fmt.Sprintf("%s %s %s %s:%d %s", "2006-01-02 15:04:05.000000", log.TagToken,
19-
log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
19+
log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
2020
log.SetFormat(format)
2121
log.Tinfof("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "this is a test message, %d", 1111)
2222
2323
format = fmt.Sprintf(`{"date": "%s", "time": "%s", "level": "%s", "file": "%s", "line": %d, "log": "%s"}`,
24-
"2006-01-02", "15:04:05.999", log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
24+
"2006-01-02", "15:04:05.999", log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
2525
log.SetFormat(format)
2626
log.Infof("this is a test message, %d", 1111)
2727
2828
format = fmt.Sprintf(`<log><date>%s</date><time>%s</time><level>%s</level><file>%s</file><line>%d</line><msg>%s</msg><log>`,
29-
"2006-01-02", "15:04:05.000", log.LevelToken, log.ProjectToken, log.LineToken, log.MessageToken)
29+
"2006-01-02", "15:04:05.000", log.LevelToken, log.FileToken, log.LineToken, log.MessageToken)
3030
log.SetFormat(format)
3131
log.Tinfof("6ba7b814-9dad-11d1-80b4-00c04fd430c8", "this is a test message, %d", 1111)
3232
}
3333
3434
日志输出:
3535
36-
2016-01-16 20:28:34 debug examples/main.go:10 this is a test message, 1111
37-
2016-01-16 20:28:34.280601 6ba7b814-9dad-11d1-80b4-00c04fd430c8 info examples/main.go:15 this is a test message, 1111
38-
{"date": "2016-01-16", "time": "20:28:34.28", "level": "info", "file": "examples/main.go", "line": 20, "log": "this is a test message, 1111"}
39-
<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>
36+
2016-01-16 20:28:34 debug main.go:10 this is a test message, 1111
37+
2016-01-16 20:28:34.280601 6ba7b814-9dad-11d1-80b4-00c04fd430c8 info main.go:15 this is a test message, 1111
38+
{"date": "2016-01-16", "time": "20:28:34.28", "level": "info", "file": "main.go", "line": 20, "log": "this is a test message, 1111"}
39+
<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>
4040
4141
*/
4242
package log

printer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77

88
func init() {
99
// 默认实现标准格式标准输出
10-
SetPrinter(NewStandard(os.Stdout, DefaultFormatTag))
10+
SetPrinter(NewStandard(os.Stdout, DefaultFormat))
1111
}
1212

1313
// Printer 定义了打印接口

standard.go

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ type record struct {
1818
Date, Time string
1919
Tag string
2020
Level string
21+
Path string
2122
File string
2223
Line int
2324
Message string
@@ -113,17 +114,12 @@ func (s *Standard) Tprintf(l Level, tag string, format string, m ...interface{})
113114
}
114115

115116
var ok bool
116-
_, r.File, r.Line, ok = runtime.Caller(2) // expensive
117+
_, r.Path, r.Line, ok = runtime.Caller(2) // expensive
117118
if ok {
118-
if i := strings.LastIndex(r.File, "/github.com/"); i > -1 {
119-
r.File = r.File[i+12:]
120-
if i = strings.Index(r.File, "/"); i > -1 {
121-
r.File = r.File[i+1:]
122-
}
123-
} else if i := strings.LastIndex(r.File, "/vendor/"); i > -1 {
124-
r.File = r.File[i+8:]
125-
} else if i := strings.LastIndex(r.File, "/src/"); i > -1 {
126-
r.File = r.File[i+5:]
119+
if i := strings.LastIndexByte(r.Path, '/'); i > -1 {
120+
r.File = r.Path[i+1:]
121+
} else {
122+
r.File = r.Path
127123
}
128124
} else {
129125
r.File = "???"
@@ -185,9 +181,7 @@ func (s *Standard) Tprintf(l Level, tag string, format string, m ...interface{})
185181
// 格式解析,把格式串替换成 token 串
186182
func parseFormat(format string, dateFmt, timeFmt string) (pattern string) {
187183
// 顺序最好不要变,从最长的开始匹配
188-
pattern = strings.Replace(format, PathToken, "{{ .File }}", -1)
189-
pattern = strings.Replace(pattern, PackageToken, "{{ .File }}", -1)
190-
pattern = strings.Replace(pattern, ProjectToken, "{{ .File }}", -1)
184+
pattern = strings.Replace(format, PathToken, "{{ .Path }}", -1)
191185
pattern = strings.Replace(pattern, FileToken, "{{ .File }}", -1)
192186
pattern = strings.Replace(pattern, TagToken, "{{ .Tag }}", -1)
193187
pattern = strings.Replace(pattern, LevelToken, "{{ .Level }}", -1)

0 commit comments

Comments
 (0)