-
Notifications
You must be signed in to change notification settings - Fork 2
/
adapter.go
79 lines (66 loc) · 1.7 KB
/
adapter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// author: wsfuyibing <websearch@163.com>
// date: 2023-02-18
package adapters
import (
"github.com/fuyibing/log/v8/base"
"github.com/fuyibing/log/v8/formatters"
"sync"
)
type (
AdapterManager interface {
// Get
// registry from manager.
Get(name string) func() AdapterRegistry
// Set
// registry into manager.
//
// Override if exists. You must restart client if used
// registry changed.
Set(name string, callee func() AdapterRegistry) AdapterManager
}
// AdapterRegistry
// interface for customer adapter.
AdapterRegistry interface {
// Logs
// write lines to target storage / device.
Logs(lines ...*base.Line) error
// SetFormatter
// specify log content formatter handler.
SetFormatter(formatter formatters.Formatter)
}
adapter struct {
mu *sync.RWMutex
registries map[string]func() AdapterRegistry
}
)
// /////////////////////////////////////////////////////////////
// Interface methods
// /////////////////////////////////////////////////////////////
func (o *adapter) Get(name string) func() AdapterRegistry {
o.mu.RLock()
defer o.mu.RUnlock()
if v, ok := o.registries[name]; ok {
return v
}
return nil
}
func (o *adapter) Set(name string, callee func() AdapterRegistry) AdapterManager {
o.mu.Lock()
defer o.mu.Unlock()
o.registries[name] = callee
return o
}
// /////////////////////////////////////////////////////////////
// Access methods
// /////////////////////////////////////////////////////////////
func (o *adapter) init() *adapter {
o.mu = &sync.RWMutex{}
o.registries = make(map[string]func() AdapterRegistry)
o.initDefaults()
return o
}
func (o *adapter) initDefaults() {
for name, call := range adapterContainers {
o.Set(name, call)
}
}