in runtime/gateway.go [637:724]
func (gateway *Gateway) setupLogger(config *StaticConfig) error {
var output zapcore.WriteSyncer
logEncoder := zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
logLevel := zap.InfoLevel
if config.ContainsKey("logger.level") {
levelString := config.MustGetString("logger.level")
var ok bool
logLevel, ok = levelMap[levelString]
if !ok {
return errors.Errorf("unknown log level for gateway logger: %s", levelString)
}
}
tempLogger := zap.New(
zapcore.NewCore(
logEncoder,
os.Stderr,
logLevel,
),
)
loggerFileName := config.MustGetString("logger.fileName")
loggerOutput := config.MustGetString("logger.output")
if loggerFileName == "" || loggerOutput == "stdout" {
var writer zapcore.WriteSyncer
if gateway.logWriter != nil {
writer = zap.CombineWriteSyncers(os.Stdout, gateway.logWriter)
} else {
writer = os.Stdout
}
output = writer
} else {
err := os.MkdirAll(filepath.Dir(loggerFileName), 0777)
if err != nil {
tempLogger.Error("Error creating log directory", zap.Error(err))
return errors.Wrap(err, "Error creating log directory")
}
loggerFile, err := os.OpenFile(
loggerFileName,
os.O_APPEND|os.O_WRONLY|os.O_CREATE,
0644,
)
if err != nil {
tempLogger.Error("Error opening log file", zap.Error(err))
return errors.Wrap(err, "Error opening log file")
}
gateway.loggerFile = loggerFile
if gateway.logWriter != nil {
writer := zap.CombineWriteSyncers(loggerFile, gateway.logWriter)
output = writer
} else {
output = loggerFile
}
}
atomLevel := zap.NewAtomicLevelAt(logLevel)
zapLogger := zap.New(zapcore.NewCore(
logEncoder,
output,
atomLevel,
))
gateway.atomLevel = &atomLevel
gateway.logEncoder = logEncoder
gateway.logWriteSyncer = output
// Default to a STDOUT logger
gateway.Logger = zapLogger.With(
zap.String("zone", gateway.Config.MustGetString("datacenter")),
zap.String("env", gateway.Config.MustGetString("env")),
zap.String("hostname", GetHostname()),
zap.String("service", gateway.Config.MustGetString("serviceName")),
zap.Int("pid", os.Getpid()),
)
gateway.ContextLogger = NewContextLogger(gateway.Logger)
if config.ContainsKey(skipZanzibarLogsKey) {
skipZanzibarLogs := config.MustGetBoolean(skipZanzibarLogsKey)
gateway.ContextLogger.SetSkipZanzibarLogs(skipZanzibarLogs)
}
return nil
}