func RedirectStdLog(l *Logger) func() {
	flags := log.Flags()
	prefix := log.Prefix()
	log.SetFlags(0)
	log.SetPrefix("")
	logFunc := l.WithOptions(
		AddCallerSkip(_stdLogDefaultDepth + _loggerWriterDepth),
	).Info
	log.SetOutput(&loggerWriter{logFunc})
	return func() {
		log.SetFlags(flags)
		log.SetPrefix(prefix)
		log.SetOutput(os.Stderr)
	}
}
RedirectStdLog redirects output from the standard library's package-global
logger to the supplied logger at InfoLevel. Since zap already handles caller
annotations, timestamps, etc., it automatically disables the standard
library's annotations and prefixing.

It returns a function to restore the original prefix and flags and reset the
standard library's output to os.Stdout.
package zap
import (
	"bytes"
	"fmt"
	"log"
	"os"
	"sync"
	"go.uber.org/zap/zapcore"
)
const (
	_stdLogDefaultDepth = 2
	_loggerWriterDepth  = 2
)
var (
	_globalMu sync.RWMutex
	_globalL  = NewNop()
	_globalS  = _globalL.Sugar()
)
func L() *Logger {
	_globalMu.RLock()
	l := _globalL
	_globalMu.RUnlock()
	return l
}
func S() *SugaredLogger {
	_globalMu.RLock()
	s := _globalS
	_globalMu.RUnlock()
	return s
}
func ReplaceGlobals(logger *Logger) func() {
	_globalMu.Lock()
	prev := _globalL
	_globalL = logger
	_globalS = logger.Sugar()
	_globalMu.Unlock()
	return func() { ReplaceGlobals(prev) }
}
func NewStdLog(l *Logger) *log.Logger {
	logger := l.WithOptions(AddCallerSkip(_stdLogDefaultDepth + _loggerWriterDepth))
	f := logger.Info
	return log.New(&loggerWriter{f}, ""  , 0  )
}
func NewStdLogAt(l *Logger, level zapcore.Level) (*log.Logger, error) {
	logger := l.WithOptions(AddCallerSkip(_stdLogDefaultDepth + _loggerWriterDepth))
	var logFunc func(string, ...zapcore.Field)
	switch level {
	case DebugLevel:
		logFunc = logger.Debug
	case InfoLevel:
		logFunc = logger.Info
	case WarnLevel:
		logFunc = logger.Warn
	case ErrorLevel:
		logFunc = logger.Error
	case DPanicLevel:
		logFunc = logger.DPanic
	case PanicLevel:
		logFunc = logger.Panic
	case FatalLevel:
		logFunc = logger.Fatal
	default:
		return nil, fmt.Errorf("unrecognized level: %q", level)
	}
	return log.New(&loggerWriter{logFunc}, ""  , 0  ), nil
}