/******************************************************************************
 * Copyright (c)  2022 PingCAP, Inc.                                          *
 * Licensed 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.                                             *
 ******************************************************************************/

/*******************************************************************************
 * @File: log.go
 * @Description:
 * @Author: jiangxunyu@pingcap.com
 * @Version: 1.0.0
 * @Date: 2022/6/8 14:31
*******************************************************************************/

package utils

import (
	"github.com/pingcap/log"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

// InitLog initializes the logger with specified level and optional output file
func InitLog(level string, outputFile ...log.FileLogConfig) {
	// check whether it is a valid log level
	_, err := zapcore.ParseLevel(level)
	if err != nil {
		level = "info"
	}

	config := &log.Config{
		Level:             level,
		Format:            "json",
		DisableTimestamp:  false,
		DisableCaller:     false,
		DisableStacktrace: false,
	}

	// Set output file if provided
	if len(outputFile) > 0 {
		config.File = outputFile[0]
	}

	logger, props, err := log.InitLogger(config)
	if err != nil {
		log.Panic("init logger failed", zap.Error(err))
	}

	// init global logger
	log.ReplaceGlobals(logger, props)
}
