# Golang 自己实现简易版日志库 **Published by:** [Robin](https://paragraph.com/@robin-8/) **Published on:** 2023-02-27 **URL:** https://paragraph.com/@robin-8/golang-4 ## Content package mylog import ( "fmt" "strings" "time" ) type LogLevel uint16 const ( DEBUG LogLevel = iota INFO WARNING ERROR FATAl ) func parseLogLevel(s string) LogLevel { s = strings.ToUpper(s) switch s { case "DEBUG": return DEBUG case "INFO": return INFO case "WARNING": return WARNING case "ERROR": return ERROR case "FATAL": return FATAl default: return DEBUG } } // Logger 结构体 type Logger struct { logLevel LogLevel } // Newlogger 构建函数 func Newlogger(levelStr string) Logger { level := parseLogLevel(levelStr) return Logger{ logLevel: level, } } func log(level string, format string, arg ...interface{}) { msg := fmt.Sprintf(format, arg...) now := time.Now() fmt.Printf("[%s] [%v]\t%s\n", now.Format("2006-01-02 15:04:05"), level, msg) } // 日志级别判断; func (l Logger) enable(level LogLevel) bool { return level >= l.logLevel } func (l Logger) Debug(format string, arg ...interface{}) { if l.enable(DEBUG) { log("DEBUG", format, arg...) } } func (l Logger) Info(format string, arg ...interface{}) { if l.enable(INFO) { log("INFO", format, arg...) } } func (l Logger) Warning(format string, arg ...interface{}) { if l.enable(WARNING) { log("WARNING", format, arg...) } } func (l Logger) Error(format string, arg ...interface{}) { if l.enable(ERROR) { log("ERROR", format, arg...) } } func (l Logger) Fatal(format string, arg ...interface{}) { if l.enable(FATAl) { log("FATAl", format, arg...) } } package main import ( "daily-job/day27/mylog" "time" ) func main() { log := mylog.Newlogger("WARNING") for { log.Debug("This is a debug log.") log.Info("This is a Info log.") log.Warning("This is a Warning log.") log.Error("This is a Error log.") log.Fatal("This is a Fatal log.") time.Sleep(time.Second) } } ## Publication Information - [Robin](https://paragraph.com/@robin-8/): Publication homepage - [All Posts](https://paragraph.com/@robin-8/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@robin-8): Subscribe to updates