| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package log |
| |
| import ( |
| "os" |
| |
| "go.uber.org/zap" |
| "go.uber.org/zap/zapcore" |
| |
| "github.com/apisix/manager-api/conf" |
| ) |
| |
| var logger *zap.SugaredLogger |
| |
| func init() { |
| writeSyncer := fileWriter() |
| encoder := getEncoder() |
| logLevel := getLogLevel() |
| core := zapcore.NewCore(encoder, writeSyncer, logLevel) |
| |
| zapLogger := zap.New(core, zap.AddCaller()) |
| |
| logger = zapLogger.Sugar() |
| } |
| |
| func getLogLevel() zapcore.LevelEnabler { |
| level := zapcore.WarnLevel |
| switch conf.ErrorLogLevel { |
| case "debug": |
| level = zapcore.DebugLevel |
| case "info": |
| level = zapcore.InfoLevel |
| case "warn": |
| level = zapcore.WarnLevel |
| case "error": |
| level = zapcore.ErrorLevel |
| case "panic": |
| level = zapcore.PanicLevel |
| case "fatal": |
| level = zapcore.FatalLevel |
| } |
| return level |
| } |
| |
| func getEncoder() zapcore.Encoder { |
| encoderConfig := zap.NewProductionEncoderConfig() |
| encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder |
| encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder |
| return zapcore.NewConsoleEncoder(encoderConfig) |
| } |
| |
| func fileWriter() zapcore.WriteSyncer { |
| //standard output |
| if conf.ErrorLogPath == "/dev/stdout" { |
| return zapcore.Lock(os.Stdout) |
| } |
| if conf.ErrorLogPath == "/dev/stderr" { |
| return zapcore.Lock(os.Stderr) |
| } |
| |
| writer, _, err := zap.Open(conf.ErrorLogPath) |
| if err != nil { |
| panic(err) |
| } |
| return writer |
| } |
| |
| func getZapFields(logger *zap.SugaredLogger, fields []interface{}) *zap.SugaredLogger { |
| if len(fields) == 0 { |
| return logger |
| } |
| |
| return logger.With(fields) |
| } |