完成config和logger

This commit is contained in:
MahnoKropotkinvich 2024-12-23 14:53:49 +08:00
parent 8336a4f4a7
commit be60a98397
5 changed files with 84 additions and 10 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
bin/
go.sum

View File

@ -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
}

6
go.mod
View File

@ -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
)

55
logger.go Normal file
View File

@ -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
}

14
main.go Normal file
View File

@ -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)
}
}