add log.go

master
ehlxr 2017-06-25 08:43:39 +08:00
parent 09d2fb4964
commit d37fa0e399
3 changed files with 251 additions and 3 deletions

165
log/log.go Normal file
View File

@ -0,0 +1,165 @@
package log
import (
"fmt"
"os"
"runtime"
"strings"
"github.com/sirupsen/logrus"
"github.com/x-cray/logrus-prefixed-formatter"
)
type (
Fields logrus.Fields
)
var (
mylog *logrus.Logger
fn bool
)
func init() {
mylog = logrus.New()
mylog.Formatter = &logrus.JSONFormatter{}
mylog.Out = os.Stdout
mylog.Level = logrus.DebugLevel
mylog.Formatter = &prefixed.TextFormatter{
ForceFormatting: true,
QuoteEmptyFields: true,
TimestampFormat: "2006-01-02 15:04:05",
FullTimestamp: true,
ForceColors: true,
}
fn = true
}
func SetFn(val bool) {
fn = val
}
func SetLogLevel(level logrus.Level) {
mylog.Level = level
}
func SetLogFormatter(formatter logrus.Formatter) {
mylog.Formatter = formatter
}
func NewLog(prefix string) *logrus.Entry {
return mylog.WithField("prefix", prefix)
}
func fileInfo(skip int) string {
_, file, line, ok := runtime.Caller(skip)
if !ok {
file = "<???>"
line = 1
} else {
slash := strings.LastIndex(file, "/")
if slash >= 0 {
file = file[slash+1:]
}
}
return fmt.Sprintf("%s:%d", file, line)
}
func Debug(args ...interface{}) {
if fn {
mylog.WithField("prefix", fileInfo(2)).Debug(args...)
} else {
mylog.Debug(args...)
}
}
func DebugWithFields(fields Fields, args ...interface{}) {
entry := mylog.WithFields(logrus.Fields(fields))
if fn {
entry.Data["prefix"] = fileInfo(2)
}
entry.Debug(args...)
}
func Info(args ...interface{}) {
if fn {
mylog.WithField("prefix", fileInfo(2)).Info(args...)
} else {
mylog.Info(args...)
}
}
func Infof(format string, args ...interface{}) {
if fn {
mylog.WithField("prefix", fileInfo(2)).Infof(format, args)
} else {
mylog.Infof(format, args)
}
}
func InfoWithFields(fields Fields, args ...interface{}) {
entry := mylog.WithFields(logrus.Fields(fields))
if fn {
entry.Data["prefix"] = fileInfo(2)
}
entry.Info(args...)
}
func Error(args ...interface{}) {
if fn {
mylog.WithField("prefix", fileInfo(2)).Error(args...)
} else {
mylog.Error(args...)
}
}
func ErrorWithFields(fields Fields, args ...interface{}) {
entry := mylog.WithFields(logrus.Fields(fields))
if fn {
entry.Data["prefix"] = fileInfo(2)
}
entry.Error(args...)
}
func Fatal(args ...interface{}) {
if fn {
mylog.WithField("prefix", fileInfo(2)).Fatal(args...)
} else {
mylog.Fatal(args...)
}
}
func FatalWithFields(fields Fields, args ...interface{}) {
entry := mylog.WithFields(logrus.Fields(fields))
if fn {
entry.Data["prefix"] = fileInfo(2)
}
entry.Fatal(args...)
}
func Panic(args ...interface{}) {
if fn {
mylog.WithField("prefix", fileInfo(2)).Panic(args...)
} else {
mylog.Panic(args...)
}
}
func PanicWithFields(fields Fields, args ...interface{}) {
entry := mylog.WithFields(logrus.Fields(fields))
if fn {
entry.Data["prefix"] = fileInfo(2)
}
entry.Info(args...)
}

46
log/log_test.go Normal file
View File

@ -0,0 +1,46 @@
package log
import (
"github.com/ehlxr/go-utils/log"
"github.com/sirupsen/logrus"
)
func init() {
log.SetLogLevel(logrus.DebugLevel)
// log.SetLogFormatter(&logrus.JSONFormatter{TimestampFormat: "2006-01-02 15:04:05"})
// log.SetFn(false)
}
func TestLog() {
log.Debug("debug text...")
log.Info("info text...")
log.Error("error text...")
// log.Fatal("fatal text...")
// log.Panic("panic text...")
log.DebugWithFields(log.Fields{
"id": "test",
"name": "jj",
}, "debug with fields text...")
log.InfoWithFields(log.Fields{
"id": "test",
"name": "jj",
}, "info with fields text...")
log.ErrorWithFields(log.Fields{
"id": "test",
"name": "jj",
}, "error with fields text...")
log.FatalWithFields(log.Fields{
"id": "test",
"name": "jj",
}, "fatal with fields text...")
// log.Panic(log.Fields{
// "id": "test",
// "name": "jj",
// }, "fatal with fields text...")
}

43
main.go
View File

@ -1,9 +1,46 @@
package main
import (
"fmt"
"github.com/ehlxr/go-utils/log"
"github.com/sirupsen/logrus"
)
func main() {
fmt.Println("go-utils")
func init() {
log.SetLogLevel(logrus.DebugLevel)
// log.SetLogFormatter(&logrus.JSONFormatter{TimestampFormat: "2006-01-02 15:04:05"})
// log.SetFn(false)
}
func main() {
log.Debug("debug text...")
log.Info("info text...")
log.Error("error text...")
// log.Fatal("fatal text...")
// log.Panic("panic text...")
log.DebugWithFields(log.Fields{
"id": "test",
"name": "jj",
}, "debug with fields text...")
log.InfoWithFields(log.Fields{
"id": "test",
"name": "jj",
}, "info with fields text...")
log.ErrorWithFields(log.Fields{
"id": "test",
"name": "jj",
}, "error with fields text...")
log.FatalWithFields(log.Fields{
"id": "test",
"name": "jj",
}, "fatal with fields text...")
// log.Panic(log.Fields{
// "id": "test",
// "name": "jj",
// }, "fatal with fields text...")
}