func Time(name string, val time.Time) Field {
	return Field(zap.Time(name, val))
}
Time returns a field for time.Time struct value.
package log
import (
	"context"
	"fmt"
	"reflect"
	"runtime/debug"
	"strings"
	"time"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)
type Log struct {
	logger *zap.Logger
	name   string
}
func (l Log) Info(format string, args ...interface{}) {
	l.logger.Sugar().Infof(format, args...)
}
func (l Log) Debug(format string, args ...interface{}) {
	l.logger.Sugar().Debugf(format, args...)
}
func (l Log) Error(format string, args ...interface{}) {
	l.logger.Sugar().Errorf(format, args...)
}
func (l Log) Warning(format string, args ...interface{}) {
	l.logger.Sugar().Warnf(format, args...)
}
func (l Log) Panic(format string, args ...interface{}) {
	l.logger.Sugar().Error("Fatal: goroutine panicked. Stacktrace: ", string(debug.Stack()))
	l.logger.Sugar().Panicf(format, args...)
}
type Field zap.Field
func (f Field) Field() Field { return f }
func FieldNamed(name string, field LoggableField) Field {
	if field == nil || (reflect.ValueOf(field).Kind() == reflect.Ptr && reflect.ValueOf(field).IsNil()) {
		return String(name, "nil")
	}
	f := field.Field()
	f.Key = name
	return f
}
func String(name, val string) Field {
	return Field(zap.String(name, val))
}
func Binary(name string, val []byte) Field {
	return Field(zap.Binary(name, val))
}
func Int(name string, val int) Field {
	return Field(zap.Int(name, val))
}
func Int32(name string, val int32) Field {
	return Field(zap.Int32(name, val))
}
func Uint16(name string, val uint16) Field {
	return Field(zap.Uint16(name, val))
}
func Uint32(name string, val uint32) Field {
	return Field(zap.Uint32(name, val))
}
func Uint64(name string, val uint64) Field {
	return Field(zap.Uint64(name, val))
}
func Namespace(name string) Field {
	return Field(zap.Namespace(name))
}
func Bool(name string, val bool) Field {
	return Field(zap.Bool(name, val))
}