func W(ctx Context, a ...interface{}) {
	Warn.Println(ctx, a...)
}
Alias for Warn level println.
package logger
import (
	"fmt"
	"io"
	"io/ioutil"
	"log"
	"os"
)
const (
	logInfoLabel  = "[info] "
	logTraceLabel = "[trace] "
	logWarnLabel  = "[warn] "
	logErrorLabel = "[error] "
)
type Context interface{}
type cidContext interface {
	Cid() int
}
type loggerPlus struct {
	logger *log.Logger
}
func NewLoggerPlus(l *log.Logger) Logger {
	return &loggerPlus{logger: l}
}
func (v *loggerPlus) format(ctx Context, a ...interface{}) []interface{} {
	if ctx == nil {
		return append([]interface{}{fmt.Sprintf("[%v] ", os.Getpid())}, a...)
	} else if ctx, ok := ctx.(cidContext); ok {
		return append([]interface{}{fmt.Sprintf("[%v][%v] ", os.Getpid(), ctx.Cid())}, a...)
	}
	return a
}
func (v *loggerPlus) formatf(ctx Context, format string, a ...interface{}) (string, []interface{}) {
	if ctx == nil {
		return "[%v] " + format, append([]interface{}{os.Getpid()}, a...)
	} else if ctx, ok := ctx.(cidContext); ok {
		return "[%v][%v] " + format, append([]interface{}{os.Getpid(), ctx.Cid()}, a...)
	}
	return format, a
}
var colorYellow = "\033[33m"
var colorRed = "\033[31m"
var colorBlack = "\033[0m"
func (v *loggerPlus) doPrintln(args ...interface{}) {
	if previousCloser == nil {
		if v == Error {
			fmt.Fprintf(os.Stdout, colorRed)
			v.logger.Println(args...)
			fmt.Fprintf(os.Stdout, colorBlack)
		} else if v == Warn {
			fmt.Fprintf(os.Stdout, colorYellow)
			v.logger.Println(args...)
			fmt.Fprintf(os.Stdout, colorBlack)
		} else {
			v.logger.Println(args...)
		}
	} else {
		v.logger.Println(args...)
	}
}
func (v *loggerPlus) doPrintf(format string, args ...interface{}) {
	if previousCloser == nil {
		if v == Error {
			fmt.Fprintf(os.Stdout, colorRed)
			v.logger.Printf(format, args...)
			fmt.Fprintf(os.Stdout, colorBlack)
		} else if v == Warn {
			fmt.Fprintf(os.Stdout, colorYellow)
			v.logger.Printf(format, args...)
			fmt.Fprintf(os.Stdout, colorBlack)
		} else {
			v.logger.Printf(format, args...)
		}
	} else {
		v.logger.Printf(format, args...)
	}
}
var Info Logger
func I(ctx Context, a ...interface{}) {
	Info.Println(ctx, a...)
}
func If(ctx Context, format string, a ...interface{}) {
	Info.Printf(ctx, format, a...)
}
var Trace Logger
func T(ctx Context, a ...interface{}) {
	Trace.Println(ctx, a...)
}
func Tf(ctx Context, format string, a ...interface{}) {
	Trace.Printf(ctx, format, a...)
}
var Warn Logger