Biar saya bawa anda mengkaji SugaredLogger go zap!

藏色散人
Lepaskan: 2021-09-13 15:41:24
ke hadapan
2159 orang telah melayarinya

Prakata

Artikel ini terutamanya mengkaji SugaredLogger of golang's zap

SugaredLogger

zap@v1.16.0/sugar.go

type SugaredLogger struct {
    base *Logger
}

func (s *SugaredLogger) Named(name string) *SugaredLogger {
    return &SugaredLogger{base: s.base.Named(name)}
}

func (s *SugaredLogger) With(args ...interface{}) *SugaredLogger {
    return &SugaredLogger{base: s.base.With(s.sweetenFields(args)...)}
}

func (s *SugaredLogger) Debug(args ...interface{}) {
    s.log(DebugLevel, "", args, nil)
}

func (s *SugaredLogger) Info(args ...interface{}) {
    s.log(InfoLevel, "", args, nil)
}

func (s *SugaredLogger) Warn(args ...interface{}) {
    s.log(WarnLevel, "", args, nil)
}

func (s *SugaredLogger) Error(args ...interface{}) {
    s.log(ErrorLevel, "", args, nil)
}

func (s *SugaredLogger) DPanic(args ...interface{}) {
    s.log(DPanicLevel, "", args, nil)
}

func (s *SugaredLogger) Panic(args ...interface{}) {
    s.log(PanicLevel, "", args, nil)
}

func (s *SugaredLogger) Fatal(args ...interface{}) {
    s.log(FatalLevel, "", args, nil)
}

func (s *SugaredLogger) Debugf(template string, args ...interface{}) {
    s.log(DebugLevel, template, args, nil)
}

func (s *SugaredLogger) Infof(template string, args ...interface{}) {
    s.log(InfoLevel, template, args, nil)
}

func (s *SugaredLogger) Warnf(template string, args ...interface{}) {
    s.log(WarnLevel, template, args, nil)
}

func (s *SugaredLogger) Errorf(template string, args ...interface{}) {
    s.log(ErrorLevel, template, args, nil)
}

func (s *SugaredLogger) DPanicf(template string, args ...interface{}) {
    s.log(DPanicLevel, template, args, nil)
}

func (s *SugaredLogger) Panicf(template string, args ...interface{}) {
    s.log(PanicLevel, template, args, nil)
}

func (s *SugaredLogger) Fatalf(template string, args ...interface{}) {
    s.log(FatalLevel, template, args, nil)
}

func (s *SugaredLogger) Debugw(msg string, keysAndValues ...interface{}) {
    s.log(DebugLevel, msg, nil, keysAndValues)
}

func (s *SugaredLogger) Infow(msg string, keysAndValues ...interface{}) {
    s.log(InfoLevel, msg, nil, keysAndValues)
}

func (s *SugaredLogger) Warnw(msg string, keysAndValues ...interface{}) {
    s.log(WarnLevel, msg, nil, keysAndValues)
}

func (s *SugaredLogger) Errorw(msg string, keysAndValues ...interface{}) {
    s.log(ErrorLevel, msg, nil, keysAndValues)
}

func (s *SugaredLogger) DPanicw(msg string, keysAndValues ...interface{}) {
    s.log(DPanicLevel, msg, nil, keysAndValues)
}

func (s *SugaredLogger) Panicw(msg string, keysAndValues ...interface{}) {
    s.log(PanicLevel, msg, nil, keysAndValues)
}

func (s *SugaredLogger) Fatalw(msg string, keysAndValues ...interface{}) {
    s.log(FatalLevel, msg, nil, keysAndValues)
}

func (s *SugaredLogger) Sync() error {
    return s.base.Sync()
}
Salin selepas log masuk
SugaredLogger menyediakan nyahpepijat, maklumat, amaran, ralat, panik, dpanik, kaedah maut (使用fmt.Sprint的默认格式 Selain itu, kaedah dengan f menyokong format, dan kaedah dengan w menyokong nilai kunci Untuk

tahap

zap@v1.16.0/level.go

const (
    // DebugLevel logs are typically voluminous, and are usually disabled in
    // production.
    DebugLevel = zapcore.DebugLevel
    // InfoLevel is the default logging priority.
    InfoLevel = zapcore.InfoLevel
    // WarnLevel logs are more important than Info, but don't need inpidual
    // human review.
    WarnLevel = zapcore.WarnLevel
    // ErrorLevel logs are high-priority. If an application is running smoothly,
    // it shouldn't generate any error-level logs.
    ErrorLevel = zapcore.ErrorLevel
    // DPanicLevel logs are particularly important errors. In development the
    // logger panics after writing the message.
    DPanicLevel = zapcore.DPanicLevel
    // PanicLevel logs a message, then panics.
    PanicLevel = zapcore.PanicLevel
    // FatalLevel logs a message, then calls os.Exit(1).
    FatalLevel = zapcore.FatalLevel
)
Salin selepas log masuk
tahap dalaman zap dibahagikan kepada nyahpepijat, maklumat, amaran, ralat, dpanik, panik, maut

DPanic

DPanic bermaksud "panik dalam pembangunan." tidak sepatutnya berlaku, tanpa ranap dalam pengeluaran

DPanik dalam pengeluaran

func dpanicInDevelopment() {
    logger, _ := zap.NewDevelopment()
    defer logger.Sync() // flushes buffer, if any
    sugar := logger.Sugar()
    sugar.DPanic("test dpanic")
    sugar.Info("this will not be logged")
}
Salin selepas log masuk
DPanik merosot kepada mod ralat di bawah keadaan bukan pembangunan, dan maklumat akhir masih akan dikeluarkan, yang lebih selamat dalam pengeluaran.

logger.check

func dpanicInProduction() {
    logger, _ := zap.NewProduction()
    defer logger.Sync() // flushes buffer, if any
    sugar := logger.Sugar()
    sugar.DPanic("test dpanic logged as error in not development mode")
    sugar.Info("this will be logged")
}
Salin selepas log masuk
zap@v1.16.0/logger.go

Kaedah logger.check akan menentukan lvl jika zapcore.DPanicLevel, ia akan pergi lebih jauh Tentukan sama ada ia berada dalam mod pembangunan Jika ya, ia akan ditetapkan

Ringkasan
func (log *Logger) check(lvl zapcore.Level, msg string) *zapcore.CheckedEntry {
    // check must always be called directly by a method in the Logger interface
    // (e.g., Check, Info, Fatal).
    const callerSkipOffset = 2

    // Check the level first to reduce the cost of disabled log calls.
    // Since Panic and higher may exit, we skip the optimization for those levels.
    if lvl < zapcore.DPanicLevel && !log.core.Enabled(lvl) {
        return nil
    }

    // Create basic checked entry thru the core; this will be non-nil if the
    // log message will actually be written somewhere.
    ent := zapcore.Entry{
        LoggerName: log.name,
        Time:       time.Now(),
        Level:      lvl,
        Message:    msg,
    }
    ce := log.core.Check(ent, nil)
    willWrite := ce != nil

    // Set up any required terminal behavior.
    switch ent.Level {
    case zapcore.PanicLevel:
        ce = ce.Should(ent, zapcore.WriteThenPanic)
    case zapcore.FatalLevel:
        onFatal := log.onFatal
        // Noop is the default value for CheckWriteAction, and it leads to
        // continued execution after a Fatal which is unexpected.
        if onFatal == zapcore.WriteThenNoop {
            onFatal = zapcore.WriteThenFatal
        }
        ce = ce.Should(ent, onFatal)
    case zapcore.DPanicLevel:
        if log.development {
            ce = ce.Should(ent, zapcore.WriteThenPanic)
        }
    }

    // Only do further annotation if we're going to write this message; checked
    // entries that exist only for terminal behavior don't benefit from
    // annotation.
    if !willWrite {
        return ce
    }

    // Thread the error output through to the CheckedEntry.
    ce.ErrorOutput = log.errorOutput
    if log.addCaller {
        frame, defined := getCallerFrame(log.callerSkip + callerSkipOffset)
        if !defined {
            fmt.Fprintf(log.errorOutput, "%v Logger.check error: failed to get caller\n", time.Now().UTC())
            log.errorOutput.Sync()
        }

        ce.Entry.Caller = zapcore.EntryCaller{
            Defined:  defined,
            PC:       frame.PC,
            File:     frame.File,
            Line:     frame.Line,
            Function: frame.Function,
        }
    }
    if log.addStack.Enabled(ce.Entry.Level) {
        ce.Entry.Stack = StackSkip("", log.callerSkip+callerSkipOffset).String
    }

    return ce
}
Salin selepas log masuk
ce.Should(ent, zapcore.WriteThenPanic)Tahap dalam zap dibahagikan kepada debug, info. , amaran, ralat, dpanik, panik dan maut

SugaredLogger menyediakan nyahpepijat, maklumat, amaran, ralat, panik, dpanik, kaedah maut (

Selain itu, kaedah dengan f menyokong format,). dan kaedah dengan w menyokong kekunci dengan Pasangan nilai
  • DPanik dalam pembangunan mempunyai kesan yang sama dengan panik, dan di bawah bukan pembangunan ia merosot kepada mod ralat
  • 使用fmt.Sprint的默认格式

Atas ialah kandungan terperinci Biar saya bawa anda mengkaji SugaredLogger go zap!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:segmentfault.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan