Files
zhub/internal/config/config.go
绝尘 44d4fcdbc4 更新:1、依赖升级
2、module 名称地址
2025-10-06 00:46:51 +08:00

140 lines
3.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package config
import (
"log"
"os"
"github.com/spf13/viper"
"gopkg.in/ini.v1"
)
type Log struct {
Handlers string `ini:"handlers"`
Level string `ini:"level"`
File string `ini:"file"`
}
type Config struct {
Log Log `ini:"log"`
Service struct {
Watch string `ini:"watch"`
Addr string `ini:"addr"`
Auth bool `ini:"auth"`
} `ini:"service"`
Data struct {
Dir string `ini:"dir"`
} `ini:"data"`
Ztimer struct {
Db struct {
Addr string `ini:"addr"`
User string `ini:"user"`
Password string `ini:"password"`
Database string `ini:"database"`
Schema string `ini:"schema"`
Type string `ini:"type"`
} `ini:"db"`
} `ini:"ztimer"`
Auth map[string]string `ini:"auth"`
}
func ReadConfig() Config {
conf := Config{}
viper.SetDefault("log.handlers", "console")
viper.SetDefault("log.level", "info")
viper.SetDefault("service.auth", true)
defer func() {
os.MkdirAll(conf.Data.Dir, os.ModeDir)
}()
/*// 读取指定的配置文件
if !strings.EqualFold("", fileName) {
viper.AddConfigPath(fileName) // 指定配置文件
if err := viper.ReadInConfig(); err == nil {
if err := viper.Unmarshal(&conf); err != nil {
log.Fatalf("Failed to unmarshal config: %s", err.Error())
}
return conf
}
log.Fatalf("Config file not found: " + fileName)
return conf
}*/
// 尝试从 /etc/ 目录下查找 zhub.ini 配置文件
/*viper.AddConfigPath("/etc/") // 添加 /etc/ 目录作为配置文件搜索路径
viper.SetConfigName("zhub") // 指定配置文件名为 zhub
if err := viper.ReadInConfig(); err == nil {
if err := viper.Unmarshal(&conf); err != nil {
log.Fatalf("Failed to unmarshal config: %s", err.Error())
}
return conf
}*/
// 如果 /etc/ 目录下未找到配置文件,则尝试从当前程序运行目录下查找 app.ini 配置文件
/*dir, err := os.Getwd() // 获取程序运行目录
if err != nil {
log.Fatalf("Failed to get current directory: %s", err.Error())
}
viper.SetConfigName("app") // 指定配置文件名为 app
viper.SetConfigType("ini") // 指定配置文件类型为 ini
viper.AddConfigPath(dir) // 添加当前程序所在目录作为配置文件搜索路径
if err := viper.ReadInConfig(); err == nil {
if err := viper.Unmarshal(&conf); err != nil {
log.Fatalf("Failed to unmarshal config: %s", err.Error())
}
// conf.Ztimer.Db.Password 包含 % 做url 转码
if strings.Contains(conf.Ztimer.Db.Password, "%") {
unescape, err := url.QueryUnescape(conf.Ztimer.Db.Password)
if err == nil {
conf.Ztimer.Db.Password = unescape
}
}
return conf
} else {
log.Fatalf("Config file not found: " + err.Error())
}*/
load, err := ini.Load("app.ini")
if err != nil {
log.Panicf("Failed to load config: %s", err.Error())
}
load.MapTo(&conf)
return conf
}
func InitLog(logConfig Log) {
logHandlers := logConfig.Handlers
logLevel := logConfig.Level
logFile := logConfig.File
if logHandlers == "console" {
log.SetOutput(os.Stdout)
} else if logHandlers == "file" {
file, err := os.OpenFile(logFile, os.O_CREATE|os.O_APPEND|os.O_SYNC|os.O_RDWR, 0777)
if err != nil {
log.Println(err)
}
log.SetOutput(file)
} else {
log.SetOutput(os.Stdout)
}
switch logLevel {
case "info":
log.SetFlags(log.LstdFlags | log.Lmicroseconds | log.Lshortfile)
log.SetPrefix("[Info] ")
log.Println("Logger is set up with log level: info")
case "debug":
log.SetFlags(log.LstdFlags | log.Lmicroseconds | log.Lshortfile)
log.SetPrefix("[Debug] ")
log.Println("Logger is set up with log level: debug")
case "error":
log.SetFlags(log.LstdFlags | log.Lmicroseconds | log.Lshortfile)
log.SetPrefix("[Error] ")
log.Println("Logger is set up with log level: error")
default:
log.SetFlags(log.LstdFlags | log.Lmicroseconds | log.Lshortfile)
log.SetPrefix("[Info] ")
log.Println("Logger is set up with default log level: info")
}
}