本文已参加「新人创作礼」活动,一起开启掘金创作之路。
上文写了关于跨域的部分问题,跨域的进一步设置,今天先不书写,我们今天需要看一下log中间件的使用 首先在global文件夹下创建log.go文件 我在这选用的log的包是logrus,这个东西其实都一样。log,就看你自己喜欢使用哪一个,
package global
import (
"bytes"
"fmt"
"github.com/sirupsen/logrus"
"io"
"os"
"path/filepath"
"time"
)
// 初始化log
func InitLogger() {
logrusLogLevel, err := logrus.ParseLevel("debug")
if err != nil {
return
}
// 输出位置
logrus.SetOutput(io.MultiWriter(LogFile("kitLog/"), os.Stdout))
// 日志等级
logrus.SetLevel(logrusLogLevel)
// 记录器是否启用
logrus.SetReportCaller(true)
// 自定义格式
logrus.SetFormatter(&MyFormatter{})
return
}
// 日志输出位置
func LogFile(fileDir string) (pf *os.File) {
fileName := time.Now().Format("2006-01-02")
fileName += ".log"
filePath := filepath.Join(fileDir, fileName)
pf, _ = os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
return
}
type MyFormatter struct{}
// 重写并且自定义自己的方法
func (m *MyFormatter) Format(entry *logrus.Entry) ([]byte, error) {
var b *bytes.Buffer
if entry.Buffer != nil {
b = entry.Buffer
} else {
b = &bytes.Buffer{}
}
timestamp := entry.Time.Format("2006-01-02 15:04:05")
var newLog string
//HasCaller()为true才会有调用信息
if entry.HasCaller() {
fName := filepath.Base(entry.Caller.File)
newLog = fmt.Sprintf(
"%c[1;44;32m[%.4s]%c[0m [%s] %c[1;42;34m[%s:%d]%c[0m %s",
0x1B, entry.Level, 0x1B, /* 日志等级 */
timestamp, /* 时间戳 */
0x1B, fName, entry.Caller.Line, 0x1B, /* 哪一行 */
entry.Message) /* 日志输出信息 */
} else {
newLog = fmt.Sprintf("%c[1;43;31m[%.4s]%c[0m [%s] %s", 0x1B, entry.Level, 0x1B, timestamp, entry.Message)
}
if len(entry.Data) > 0 {
newLog = fmt.Sprintf("%s ++ %v", newLog, entry.Data)
}
newLog += "\n"
b.WriteString(newLog)
return b.Bytes(), nil
}
这就是我使用的logrus的一些基本的设置,然后在自己的定义的方法中,也定义了自己的颜色等
日志定义完成之后,我们需要在main方法中调用启用他
写到这,我想起来了,我还需要自定义的一个配置文件的读取方法,算了 一个一个写吧,这样基本就算是完成了,OK 代码提交
代码地址: gitee.com/weishunuan_…