dogger

Форк
0
/
context.go 
77 строк · 1.4 Кб
1
package context
2

3
import (
4
	"context"
5
	"runtime"
6
	"time"
7

8
	"github.com/nikwo/dogger/level"
9
	"github.com/nikwo/dogger/utility"
10
)
11

12
type LogContext interface {
13
	GetTime() time.Time
14
	GetCaller() string
15
	GetLevel() level.Level
16
	SetTime(t time.Time)
17
	SetCaller(caller string)
18
	SetLevel(lvl level.Level)
19
	Deadline() (deadline time.Time, ok bool)
20
	Done() <-chan struct{}
21
	Err() error
22
	Value(key interface{}) interface{}
23
}
24

25
func NewLogContext(ctx context.Context, lvl level.Level, callerRecurse ...int) LogContext {
26
	var caller string
27
	var layer = 0
28
	if len(callerRecurse) > 0 {
29
		layer += callerRecurse[0]
30
	}
31

32
	lc := &logContext{Context: ctx, Time: time.Now()}
33
	pc, _, _, ok := runtime.Caller(2 + layer)
34

35
	if !ok {
36
		return lc
37
	}
38

39
	details := runtime.FuncForPC(pc)
40
	file, line := details.FileLine(pc)
41
	caller = utility.FormatCaller(file, details.Name(), line)
42
	lc.Caller = caller
43
	lc.Level = lvl
44

45
	return lc
46
}
47

48
type logContext struct {
49
	Time   time.Time
50
	Caller string
51
	Level  level.Level
52
	context.Context
53
}
54

55
func (c *logContext) GetTime() time.Time {
56
	return c.Time
57
}
58

59
func (c *logContext) GetCaller() string {
60
	return c.Caller
61
}
62

63
func (c *logContext) GetLevel() level.Level {
64
	return c.Level
65
}
66

67
func (c *logContext) SetTime(t time.Time) {
68
	c.Time = t
69
}
70

71
func (c *logContext) SetCaller(caller string) {
72
	c.Caller = caller
73
}
74

75
func (c *logContext) SetLevel(lvl level.Level) {
76
	c.Level = lvl
77
}
78

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.