func (l Log) String() string {
	return l.GoString()
}
String implemented fmt.Stringer interface, returns a Go-syntax string.
package logging
import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"os"
	"strconv"
	"strings"
	"sync"
	"time"
	"github.com/teambition/gear"
)
var crlfEscaper = strings.NewReplacer("\r", "\\r", "\n", "\\n")
type Messager interface {
	fmt.Stringer
	Format() (string, error)
}
type Log map[string]interface{}
func (l Log) Format() (string, error) {
	res, err := json.Marshal(l)
	if err == nil {
		return string(res), nil
	}
	return "", err
}
func (l Log) GoString() string {
	count := len(l)
	buf := bytes.NewBufferString("Log{")
	for key, value := range l {
		if count--; count == 0 {
			fmt.Fprintf(buf, "%s:%#v}", key, value)
		} else {
			fmt.Fprintf(buf, "%s:%#v, ", key, value)
		}
	}
	return buf.String()
}