学Go第5天
我枯了……
上代码吧!
package main
import (
"time"
"com.hsy/stu/day6/mylogger"
)
//测试我们自己写的日志库
func main() {
log := mylogger.NewLog("info")
for {
log.Debug("这是一条Degub日志")
log.Info("这是一条info日志")
log.Warning("这是一条Warning日志")
log.Error("这是一条Error日志")
log.Fatal("这是一条Fatal日志")
time.Sleep(time.Second)
}
}
package mylogger
import (
"errors"
"fmt"
"path"
"runtime"
"strings"
)
const (
//定义日志级别
UNKNOWN LogLevel = iota
DEBUG
TRACE
INFO
WARNING
ERROR
FATAL
)
func parseLogLevel(s string) (LogLevel, error) {
s = strings.ToLower(s)
switch s {
case "debug":
return DEBUG, nil
case "trace":
return TRACE, nil
case "info":
return INFO, nil
case "warning":
return WARNING, nil
case "error":
return ERROR, nil
case "fatal":
return FATAL, nil
default:
return UNKNOWN, errors.New("无效的日志级别错误")
}
}
//获取行号等信息
func getInfo(skip int) (funcName, fileName string, lineNo int) {
pc, file, lineNo, ok := runtime.Caller(skip)
if !ok {
fmt.Printf("有误\n")
return
}
funcName = runtime.FuncForPC(pc).Name()
fileName = path.Base(file)
return
}
package mylogger
import (
"fmt"
"time"
)
//日志级别
type LogLevel uint16
//Logger 日志结构体
type Logger struct {
Level LogLevel
}
//向终端写日志相关内容
//NewLog 构造函数
func NewLog(levelStr string) Logger {
level, err := parseLogLevel(levelStr)
if err != nil {
panic(err)
}
return Logger{
Level: level,
}
}
func (l Logger) Debug(msg string) {
if l.Level <= DEBUG {
now := time.Now()
funcName, fileName, lineNo := getInfo(2)
fmt.Printf("[%s][DEBUG] [%s: %s: %d]%s\n", now.Format("2006-01-02 15:04:05"), funcName, fileName, lineNo, msg)
}
}
func (l Logger) Info(msg string) {
if l.Level <= INFO {
now := time.Now()
funcName, fileName, lineNo := getInfo(2)
fmt.Printf("[%s][DEBUG] [%s: %s: %d]%s\n", now.Format("2006-01-02 15:04:05"), funcName, fileName, lineNo, msg)
}
}
func (l Logger) Warning(msg string) {
if l.Level <= WARNING {
now := time.Now()
funcName, fileName, lineNo := getInfo(2)
fmt.Printf("[%s][DEBUG] [%s: %s: %d]%s\n", now.Format("2006-01-02 15:04:05"), funcName, fileName, lineNo, msg)
}
}
func (l Logger) Error(msg string) {
if l.Level <= ERROR {
now := time.Now()
funcName, fileName, lineNo := getInfo(2)
fmt.Printf("[%s][DEBUG] [%s: %s: %d]%s\n", now.Format("2006-01-02 15:04:05"), funcName, fileName, lineNo, msg)
}
}
func (l Logger) Fatal(msg string) {
if l.Level <= FATAL {
now := time.Now()
funcName, fileName, lineNo := getInfo(2)
fmt.Printf("[%s][DEBUG] [%s: %s: %d]%s\n", now.Format("2006-01-02 15:04:05"), funcName, fileName, lineNo, msg)
}
}