func (ctx *loggerContext) Warnf(format string, args ...interface{}) {
	logLevelf(ctx, WarnLevel, format, args...)
}
Warnf level log with format
package ulog
import (
	"fmt"
	"strings"
	"golang.org/x/net/context"
)
const defaultCallDepth = 4
type LoggerContext interface {
	context.Context
	WithField(key string, value interface{}) LoggerContext
	WithAdapter(Adapter) LoggerContext
	WithCallDepth(depth int) LoggerContext
	Error(args ...interface{})
	Errorf(format string, args ...interface{})
	Warn(args ...interface{})
	Warnf(format string, args ...interface{})
	Info(args ...interface{})
	Infof(format string, args ...interface{})
	Debug(args ...interface{})
	Debugf(format string, args ...interface{})
}
var _ LoggerContext = &loggerContext{}
type loggerContext struct {
	context.Context
}
func Logger(ctx context.Context) LoggerContext {
	if l, ok := ctx.(*loggerContext); ok {
		return l
	}
	if ctx == nil {
		ctx = context.Background()
	}
	return &loggerContext{Context: ctx}
}
func (ctx *loggerContext) WithField(key string, value interface{}) LoggerContext {
	return &loggerContext{
		Context: withField(ctx, key, value),
	}
}
func (ctx *loggerContext) WithAdapter(la Adapter) LoggerContext {
	return &loggerContext{
		Context: withAdapter(ctx, la),
	}
}
func (ctx *loggerContext) WithCallDepth(depth int) LoggerContext {
	return &loggerContext{
		Context: withAddingCallDepth(ctx, depth),
	}
}
func (ctx *loggerContext) Error(args ...interface{}) {
	logLevel(ctx, ErrorLevel, args...)
}
func (ctx *loggerContext) Errorf(format string, args ...interface{}) {
	logLevelf(ctx, ErrorLevel, format, args...)
}
func (ctx *loggerContext) Warn(args ...interface{}) {
	logLevel(ctx, WarnLevel, args...)
}