代码拉取完成,页面将自动刷新
/*
* 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 (
"bytes"
"fmt"
"time"
getty "github.com/apache/dubbo-getty"
"github.com/natefinch/lumberjack"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// Level represents the level of logging.
type LogLevel int8
const (
// DebugLevel logs are typically voluminous, and are usually disabled in
// production.
DebugLevel = LogLevel(zapcore.DebugLevel)
// InfoLevel is the default logging priority.
InfoLevel = LogLevel(zapcore.InfoLevel)
// WarnLevel logs are more important than Info, but don't need individual
// human review.
WarnLevel = LogLevel(zapcore.WarnLevel)
// ErrorLevel logs are high-priority. If an application is running smoothly,
// it shouldn't generate any error-level logs.
ErrorLevel = LogLevel(zapcore.ErrorLevel)
// PanicLevel logs a message, then panics.
PanicLevel = LogLevel(zapcore.PanicLevel)
// FatalLevel logs a message, then calls os.Exit(1).
FatalLevel = LogLevel(zapcore.FatalLevel)
)
func (l *LogLevel) UnmarshalText(text []byte) error {
if l == nil {
return fmt.Errorf("can't unmarshal a nil *Level")
}
if !l.unmarshalText(text) && !l.unmarshalText(bytes.ToLower(text)) {
return fmt.Errorf("unrecognized level: %q", text)
}
return nil
}
func (l *LogLevel) unmarshalText(text []byte) bool {
switch string(text) {
case "debug", "DEBUG":
*l = DebugLevel
case "info", "INFO", "": // make the zero value useful
*l = InfoLevel
case "warn", "WARN":
*l = WarnLevel
case "error", "ERROR":
*l = ErrorLevel
case "panic", "PANIC":
*l = PanicLevel
case "fatal", "FATAL":
*l = FatalLevel
default:
return false
}
return true
}
type Logger interface {
Debug(v ...interface{})
Debugf(format string, v ...interface{})
Info(v ...interface{})
Infof(format string, v ...interface{})
Warn(v ...interface{})
Warnf(format string, v ...interface{})
Error(v ...interface{})
Errorf(format string, v ...interface{})
Panic(v ...interface{})
Panicf(format string, v ...interface{})
Fatal(v ...interface{})
Fatalf(format string, v ...interface{})
}
var (
log Logger
zapLogger *zap.Logger
zapLoggerConfig = zap.Config{
// todo read level from config
Level: zap.NewAtomicLevelAt(zap.InfoLevel),
Development: true,
Encoding: "console",
EncoderConfig: zap.NewDevelopmentEncoderConfig(),
OutputPaths: []string{"stderr"},
ErrorOutputPaths: []string{"stderr"},
}
zapLoggerEncoderConfig = zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "message",
StacktraceKey: "stacktrace",
EncodeLevel: zapcore.CapitalColorLevelEncoder,
EncodeTime: encodeTime,
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: encodeCaller,
}
)
const (
logTmFmt = "2006-01-02 15:04:05.000 "
)
func encodeTime(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.Format(logTmFmt))
}
func encodeCaller(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) {
// enc.AppendString(fmt.Sprintf("\033[34m%s\033[0m", caller.TrimmedPath()))
enc.AppendString(fmt.Sprintf("%-45s", caller.TrimmedPath()))
}
func Init() {
zapLoggerConfig.EncoderConfig = zapLoggerEncoderConfig
zapLogger, _ = zapLoggerConfig.Build(zap.AddCallerSkip(1))
log = zapLogger.Sugar()
getty.SetLogger(log)
}
func InitWithOption(logPath string, level LogLevel) {
lumberJackLogger := &lumberjack.Logger{
Filename: logPath,
MaxSize: 10,
MaxBackups: 5,
MaxAge: 30,
Compress: false,
}
syncer := zapcore.AddSync(lumberJackLogger)
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.EncodeTime = encodeTime
encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
encoderConfig.EncodeCaller = encodeCaller
encoder := zapcore.NewConsoleEncoder(encoderConfig)
core := zapcore.NewCore(encoder, syncer, zap.NewAtomicLevelAt(zapcore.Level(level)))
zapLogger = zap.New(core, zap.AddCaller())
log = zapLogger.Sugar()
getty.SetLogger(log)
}
// SetLogger: customize yourself logger.
func SetLogger(logger Logger) {
log = logger
}
// GetLogger get logger
func GetLogger() Logger {
return log
}
// Debug ...
func Debug(v ...interface{}) {
if log == nil {
return
}
log.Debug(v...)
}
// Debugf ...
func Debugf(format string, v ...interface{}) {
if log == nil {
return
}
log.Debugf(format, v...)
}
// Info ...
func Info(v ...interface{}) {
if log == nil {
return
}
log.Info(v...)
}
// Infof ...
func Infof(format string, v ...interface{}) {
if log == nil {
return
}
log.Infof(format, v...)
}
// Warn ...
func Warn(v ...interface{}) {
if log == nil {
return
}
log.Warn(v...)
}
// Warnf ...
func Warnf(format string, v ...interface{}) {
if log == nil {
return
}
log.Warnf(format, v...)
}
// Error ...
func Error(v ...interface{}) {
if log == nil {
return
}
log.Error(v...)
}
// Errorf ...
func Errorf(format string, v ...interface{}) {
if log == nil {
return
}
log.Errorf(format, v...)
}
// Panic ...
func Panic(v ...interface{}) {
if log == nil {
return
}
log.Panic(v...)
}
// Panicf ...
func Panicf(format string, v ...interface{}) {
if log == nil {
return
}
log.Panicf(format, v...)
}
// Fatal ...
func Fatal(v ...interface{}) {
if log == nil {
return
}
log.Fatal(v...)
}
// Fatalf ...
func Fatalf(format string, v ...interface{}) {
if log == nil {
return
}
log.Fatalf(format, v...)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。