-
Notifications
You must be signed in to change notification settings - Fork 0
/
factory.go
42 lines (36 loc) · 1021 Bytes
/
factory.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
package logger
import (
"fmt"
"sort"
"github.com/gopi-frame/collection/kv"
"github.com/gopi-frame/contract/logger"
"github.com/gopi-frame/exception"
)
var drivers = kv.NewMap[string, logger.Driver]()
func Register(driverName string, driver logger.Driver) {
drivers.Lock()
defer drivers.Unlock()
if driver == nil {
panic(exception.NewEmptyArgumentException("driver"))
}
if drivers.ContainsKey(driverName) {
panic(exception.NewArgumentException("driverName", driver, fmt.Sprintf("duplicate driver \"%s\"", driverName)))
}
drivers.Set(driverName, driver)
}
func Drivers() []string {
drivers.RLock()
defer drivers.RUnlock()
list := drivers.Keys()
sort.Strings(list)
return list
}
func Open(driverName string, options map[string]any) (logger.Logger, error) {
drivers.RLock()
driver, ok := drivers.Get(driverName)
drivers.RUnlock()
if !ok {
return nil, exception.NewArgumentException("driverName", driverName, fmt.Sprintf("unknown driver \"%s\"", driverName))
}
return driver.Open(options)
}