1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00
moby--moby/daemon/logger/factory.go
Ahmet Alp Balkan 8b11592d69 Pass -log-opts map to logdrivers
Signed-off-by: Ahmet Alp Balkan <ahmetalpbalkan@gmail.com>
2015-05-18 16:50:14 +00:00

57 lines
1.4 KiB
Go

package logger
import (
"fmt"
"sync"
)
// Creator is a method that builds a logging driver instance with given context
type Creator func(Context) (Logger, error)
// Context provides enough information for a logging driver to do its function
type Context struct {
Config map[string]string
ContainerID string
ContainerName string
LogPath string
}
type logdriverFactory struct {
registry map[string]Creator
m sync.Mutex
}
func (lf *logdriverFactory) register(name string, c Creator) error {
lf.m.Lock()
defer lf.m.Unlock()
if _, ok := lf.registry[name]; ok {
return fmt.Errorf("logger: log driver named '%s' is already registered", name)
}
lf.registry[name] = c
return nil
}
func (lf *logdriverFactory) get(name string) (Creator, error) {
lf.m.Lock()
defer lf.m.Unlock()
c, ok := lf.registry[name]
if !ok {
return c, fmt.Errorf("logger: no log driver named '%s' is registered", name)
}
return c, nil
}
var factory = &logdriverFactory{registry: make(map[string]Creator)} // global factory instance
// RegisterLogDriver registers the given logging driver builder with given logging
// driver name.
func RegisterLogDriver(name string, c Creator) error {
return factory.register(name, c)
}
// GetLogDriver provides the logging driver builder for a logging driver name.
func GetLogDriver(name string) (Creator, error) {
return factory.get(name)
}