blob: a835ac63cb8df9fb4a956d24a70b34a4582f1ac7 [file] [log] [blame]
/*
* 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 golang
import (
"log"
"os"
"strconv"
"strings"
"github.com/apache/rocketmq-clients/golang/v5/pkg/utils"
"github.com/natefinch/lumberjack"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
const (
CLIENT_LOG_ROOT = "rocketmq.client.logRoot"
CLIENT_LOG_MAXINDEX = "rocketmq.client.logFileMaxIndex"
CLIENT_LOG_FILESIZE = "rocketmq.client.logFileMaxSize"
CLIENT_LOG_LEVEL = "rocketmq.client.logLevel"
// CLIENT_LOG_ADDITIVE = "rocketmq.client.log.additive"
CLIENT_LOG_FILENAME = "rocketmq.client.logFileName"
// CLIENT_LOG_ASYNC_QUEUESIZE = "rocketmq.client.logAsyncQueueSize"
ENABLE_CONSOLE_APPENDER = "mq.consoleAppender.enabled"
)
var sugarBaseLogger *zap.SugaredLogger
func ResetLogger() {
InitLogger()
}
func InitLogger() {
writeSyncer := getLogWriter()
isStdOut := utils.GetenvWithDef(ENABLE_CONSOLE_APPENDER, "false")
if isStdOut == "true" {
writeSyncer = os.Stdout
}
encoder := getEncoder()
var atomicLevel = zap.NewAtomicLevel()
switch strings.ToLower(os.Getenv(CLIENT_LOG_LEVEL)) {
case "debug":
atomicLevel.SetLevel(zap.DebugLevel)
case "warn":
atomicLevel.SetLevel(zap.WarnLevel)
case "error":
atomicLevel.SetLevel(zap.ErrorLevel)
default:
atomicLevel.SetLevel(zap.InfoLevel)
}
core := zapcore.NewCore(encoder, writeSyncer, atomicLevel)
logger := zap.New(core, zap.AddCaller())
sugarBaseLogger = logger.Sugar()
}
func getEncoder() zapcore.Encoder {
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
return zapcore.NewConsoleEncoder(encoderConfig)
}
func getLogWriter() zapcore.WriteSyncer {
clientLogRoot := utils.GetenvWithDef(CLIENT_LOG_ROOT, os.Getenv("user.home")+"/logs/rocketmqlogs")
clientLogMaxIndex := utils.GetenvWithDef(CLIENT_LOG_MAXINDEX, "10")
clientLogFileName := utils.GetenvWithDef(CLIENT_LOG_FILENAME, "rocketmq_client_go.log")
clientLogMaxFileSize := utils.GetenvWithDef(CLIENT_LOG_FILESIZE, "1073741824")
logFileName := clientLogRoot + "/" + clientLogFileName
maxFileIndex, err := strconv.Atoi(clientLogMaxIndex)
if err != nil {
log.Printf("%s='%s' is invalid and has been replaced with the default value %s", CLIENT_LOG_MAXINDEX, clientLogMaxIndex, "10")
maxFileIndex = 10
}
maxFileSize, err := strconv.Atoi(clientLogMaxFileSize)
if err != nil {
log.Printf("%s='%s' is invalid and has been replaced with the default value %s", CLIENT_LOG_FILESIZE, clientLogMaxFileSize, "1073741824")
maxFileSize = 1073741824
}
lumberJackLogger := &lumberjack.Logger{
Filename: logFileName,
MaxSize: maxFileSize,
MaxBackups: maxFileIndex,
Compress: false,
}
return zapcore.AddSync(lumberJackLogger)
}
func init() {
InitLogger()
}