87 lines
2.0 KiB
Markdown
87 lines
2.0 KiB
Markdown
# 程序的配置管理
|
|
|
|
## 配置的加载
|
|
```go
|
|
// 用于加载配置
|
|
config.LoadConfigFromYaml(yamlConfigFilePath)
|
|
```
|
|
|
|
## 程序内部如何使用配置
|
|
```go
|
|
// Get Config --> ConfigObject
|
|
config.C().MySQL.Host
|
|
// config.ConfigObjectInstance
|
|
```
|
|
|
|
## 为你的包添加单元测试
|
|
|
|
如何验证我们这个包的 业务逻辑是正确
|
|
|
|
```go
|
|
func TestLoadConfigFromYaml(t *testing.T) {
|
|
err := config.LoadConfigFromYaml(fmt.Sprintf("%s/book/v2/application.yaml", os.Getenv("workspaceFolder")))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Log(config.C())
|
|
}
|
|
|
|
func TestLoadConfigFromEnv(t *testing.T) {
|
|
os.Setenv("DATASOURCE_HOST", "localhost")
|
|
err := config.LoadConfigFromEnv()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Log(config.C())
|
|
}
|
|
```
|
|
|
|
## 补充日志配置
|
|
|
|
```go
|
|
// 如果是文件,结合该库使用"gopkg.in/natefinch/lumberjack.v2"
|
|
// 自己的作业: 添加日志轮转配置,结合 gopkg.in/natefinch/lumberjack.v2 使用
|
|
// 可以参考: https://github.com/infraboard/mcube/blob/master/ioc/config/log/logger.go
|
|
type Log struct {
|
|
Level zerolog.Level `json:"level" yaml:"level" toml:"level" env:"LOG_LEVEL"`
|
|
|
|
logger *zerolog.Logger
|
|
lock sync.Mutex
|
|
}
|
|
|
|
func (l *Log) SetLogger(logger zerolog.Logger) {
|
|
l.logger = &logger
|
|
}
|
|
|
|
func (l *Log) Logger() *zerolog.Logger {
|
|
l.lock.Lock()
|
|
defer l.lock.Unlock()
|
|
|
|
if l.logger == nil {
|
|
l.SetLogger(zerolog.New(l.ConsoleWriter()).Level(l.Level).With().Caller().Timestamp().Logger())
|
|
}
|
|
|
|
return l.logger
|
|
}
|
|
|
|
func (c *Log) ConsoleWriter() io.Writer {
|
|
output := zerolog.NewConsoleWriter(func(w *zerolog.ConsoleWriter) {
|
|
w.NoColor = false
|
|
w.TimeFormat = time.RFC3339
|
|
})
|
|
|
|
output.FormatLevel = func(i interface{}) string {
|
|
return strings.ToUpper(fmt.Sprintf("%-6s", i))
|
|
}
|
|
output.FormatMessage = func(i interface{}) string {
|
|
return fmt.Sprintf("%s", i)
|
|
}
|
|
output.FormatFieldName = func(i interface{}) string {
|
|
return fmt.Sprintf("%s:", i)
|
|
}
|
|
output.FormatFieldValue = func(i interface{}) string {
|
|
return strings.ToUpper(fmt.Sprintf("%s", i))
|
|
}
|
|
return output
|
|
}
|
|
``` |