From be60a983976e839c24a01d18b827d6bccf9bbe86 Mon Sep 17 00:00:00 2001 From: MahnoKropotkinvich Date: Mon, 23 Dec 2024 14:53:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90config=E5=92=8Clogger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ config.go | 17 +++++++---------- go.mod | 6 ++++++ logger.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 14 ++++++++++++++ 5 files changed, 84 insertions(+), 10 deletions(-) create mode 100644 .gitignore create mode 100644 logger.go create mode 100644 main.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e4cd5ab --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +bin/ +go.sum diff --git a/config.go b/config.go index 8724832..5440610 100644 --- a/config.go +++ b/config.go @@ -2,11 +2,9 @@ package main import ( "gopkg.in/yaml.v2" - "io/ioutil" - "log" + "os" ) -// 配置结构体 type Config struct { Server struct { Timeout int `yaml:"timeout"` @@ -15,20 +13,19 @@ type Config struct { } `yaml:"server"` } -// 全局配置变量 +// this is a global constant since it's shared var config Config -// 加载配置文件 -func loadConfig(filePath string) error { - data, err := ioutil.ReadFile(filePath) +func LoadConfig(filePath string) error { + data, err := os.ReadFile(filePath) if err != nil { - getLogger().Errorf("Failed to read config file: %v", err) + GetLogger().Fatalf("Failed to read config file: %v", err) return err } if err := yaml.Unmarshal(data, &config); err != nil { - getLogger().Errorf("Failed to unmarshal config: %v", err) + GetLogger().Fatalf("Failed to unmarshal config: %v", err) return err } - getLogger().Info("Configuration loaded successfully") + GetLogger().Info("Configuration loaded successfully") return nil } diff --git a/go.mod b/go.mod index d7affd7..2f0ff75 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,9 @@ module minimcd go 1.23.4 + +require ( + github.com/sirupsen/logrus v1.9.3 + golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect + gopkg.in/yaml.v2 v2.4.0 +) diff --git a/logger.go b/logger.go new file mode 100644 index 0000000..9cc73ba --- /dev/null +++ b/logger.go @@ -0,0 +1,55 @@ +package main + +import ( + "github.com/sirupsen/logrus" + "os" +) + +var logger *logrus.Logger + +func InitLogger() { + logger = logrus.New() + logger.SetFormatter(&logrus.TextFormatter{ + FullTimestamp: true, + }) + logLevel := os.Getenv("LOG_LEVEL") + switch logLevel { + case "debug": + logger.SetLevel(logrus.DebugLevel) + case "info": + logger.SetLevel(logrus.InfoLevel) + case "warn", "warning": + logger.SetLevel(logrus.WarnLevel) + case "error": + logger.SetLevel(logrus.ErrorLevel) + case "fatal": + logger.SetLevel(logrus.FatalLevel) + case "panic": + logger.SetLevel(logrus.PanicLevel) + default: + // 默认使用 InfoLevel + logger.SetLevel(logrus.InfoLevel) + } + logOutput := os.Getenv("LOG_OUTPUT") + switch logOutput { + case "file": + // 设置日志输出到文件 + logFile, err := os.OpenFile("/var/log/minimcd.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666) + if err != nil { + // 如果文件打开失败,回退到标准输出 + logger.SetOutput(os.Stdout) + logger.Warn("Failed to log to file, using default stdout") + } else { + logger.SetOutput(logFile) + } + case "stdout", "": + // 默认输出到控制台 + logger.SetOutput(os.Stdout) + default: + // 默认输出到控制台 + logger.SetOutput(os.Stdout) + } +} +func GetLogger() *logrus.Logger { + return logger +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..7fabdb8 --- /dev/null +++ b/main.go @@ -0,0 +1,14 @@ +package main + +import ( + "os" +) + +func main() { + InitLogger() + GetLogger().Info("minimcd starting") + if err := LoadConfig("config.yml"); err != nil { + os.Exit(1) + } + +}