Golang 自定义日志

学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)   
       }
}
发布了61 篇原创文章 · 获赞 168 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_43518645/article/details/104301351