cns/logger/v2/logger.go (40 lines of code) (raw):
package logger
import (
cores "github.com/Azure/azure-container-networking/cns/logger/v2/cores"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
type compoundCloser []func()
func (c compoundCloser) Close() {
for _, closer := range c {
closer()
}
}
func New(cfg *Config) (*zap.Logger, func(), error) {
cfg.Normalize()
core := cores.StdoutCore(cfg.level)
closer := compoundCloser{}
if cfg.File != nil {
fileCore, fileCloser, err := cores.FileCore(cfg.File)
closer = append(closer, fileCloser)
if err != nil {
return nil, closer.Close, err //nolint:wrapcheck // it's an internal pkg
}
core = zapcore.NewTee(core, fileCore)
}
if cfg.AppInsights != nil {
aiCore, aiCloser, err := cores.ApplicationInsightsCore(cfg.AppInsights)
closer = append(closer, aiCloser)
if err != nil {
return nil, closer.Close, err //nolint:wrapcheck // it's an internal pkg
}
core = zapcore.NewTee(core, aiCore)
}
platformCore, platformCloser, err := platformCore(cfg)
closer = append(closer, platformCloser)
if err != nil {
return nil, closer.Close, err
}
core = zapcore.NewTee(core, platformCore)
return zap.New(core), closer.Close, nil
}