From f840ffdc488d7605b3fbf0a03e5b65de99eb7563 Mon Sep 17 00:00:00 2001 From: kongfei Date: Wed, 1 Jun 2022 18:15:10 +0800 Subject: [PATCH] extrace log config --- agent/agent.go | 4 +-- agent/logs_agent.go | 29 ++++++++-------- agent/logs_endpoints.go | 10 +++--- config/config.go | 1 - config/logs.go | 59 +++++++++++++++++++++++++-------- inputs/cpu/logs.go | 9 ----- inputs/disk/logs.go | 9 ----- inputs/diskio/logs.go | 9 ----- inputs/exec/logs.go | 9 ----- inputs/http_response/logs.go | 9 ----- inputs/inputs.go | 2 -- inputs/kernel/logs.go | 9 ----- inputs/kernel_vmstat/logs.go | 9 ----- inputs/linux_sysctl_fs/logs.go | 9 ----- inputs/logs/logs.go | 13 -------- inputs/mem/logs.go | 9 ----- inputs/mysql/mysql.go | 2 -- inputs/net/logs.go | 9 ----- inputs/net_response/logs.go | 9 ----- inputs/netstat/logs.go | 9 ----- inputs/ntp/logs.go | 9 ----- inputs/nvidia_smi/logs.go | 9 ----- inputs/oracle/oracle.go | 6 ++-- inputs/ping/logs.go | 9 ----- inputs/processes/logs.go | 9 ----- inputs/procstat/logs.go | 9 ----- inputs/prometheus/prometheus.go | 2 -- inputs/rabbitmq/rabbitmq.go | 2 -- inputs/redis/redis.go | 2 -- inputs/system/logs.go | 9 ----- inputs/tomcat/tomcat.go | 2 -- main.go | 5 ++- pkg/cfg/cfg.go | 23 +++++++++++++ 33 files changed, 94 insertions(+), 230 deletions(-) delete mode 100644 inputs/cpu/logs.go delete mode 100644 inputs/disk/logs.go delete mode 100644 inputs/diskio/logs.go delete mode 100644 inputs/exec/logs.go delete mode 100644 inputs/http_response/logs.go delete mode 100644 inputs/kernel/logs.go delete mode 100644 inputs/kernel_vmstat/logs.go delete mode 100644 inputs/linux_sysctl_fs/logs.go delete mode 100644 inputs/logs/logs.go delete mode 100644 inputs/mem/logs.go delete mode 100644 inputs/net/logs.go delete mode 100644 inputs/net_response/logs.go delete mode 100644 inputs/netstat/logs.go delete mode 100644 inputs/ntp/logs.go delete mode 100644 inputs/nvidia_smi/logs.go delete mode 100644 inputs/ping/logs.go delete mode 100644 inputs/processes/logs.go delete mode 100644 inputs/procstat/logs.go delete mode 100644 inputs/system/logs.go diff --git a/agent/agent.go b/agent/agent.go index e4bcc93..e8bae1b 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -105,8 +105,8 @@ func (a *Agent) startInputs() error { // construct input instance instance := creator() - if config.Config.Logs.Enable { - go startLogAgent(instance) + if config.LogConfig.Enable { + go startLogAgent() } // set configurations for input instance cfg.LoadConfigs(path.Join(config.Config.ConfigDir, "input."+name), instance) diff --git a/agent/logs_agent.go b/agent/logs_agent.go index 6f53c4a..9c8880e 100644 --- a/agent/logs_agent.go +++ b/agent/logs_agent.go @@ -15,7 +15,6 @@ import ( coreConfig "flashcat.cloud/categraf/config" logsconfig "flashcat.cloud/categraf/config/logs" - "flashcat.cloud/categraf/inputs" "flashcat.cloud/categraf/pkg/logs/auditor" "flashcat.cloud/categraf/pkg/logs/client" "flashcat.cloud/categraf/pkg/logs/client/http" @@ -148,24 +147,22 @@ const ( invalidProcessingRules = "invalid_global_processing_rules" ) -func startLogAgent(instance inputs.Input) { +func startLogAgent() { logSources := logsconfig.NewLogSources() var sources []*logsconfig.LogSource - if coreConfig.Config.Logs.Enable { - for _, c := range instance.LogsConfig() { - if c == nil { - continue - } - source := logsconfig.NewLogSource(c.Name, c) - sources = append(sources, source) - if err := c.Validate(); err != nil { - log.Println("W! Invalid logs configuration:", err) - source.Status.Error(err) - continue - } - logSources.AddSource(source) + for _, c := range coreConfig.LogConfig.Items { + if c == nil { + continue } + source := logsconfig.NewLogSource(c.Name, c) + sources = append(sources, source) + if err := c.Validate(); err != nil { + log.Println("W! Invalid logs configuration:", err) + source.Status.Error(err) + continue + } + logSources.AddSource(source) } if len(sources) == 0 { @@ -202,7 +199,7 @@ func GetContainerColloectAll() bool { // GlobalProcessingRules returns the global processing rules to apply to all logs. func GlobalProcessingRules() ([]*logsconfig.ProcessingRule, error) { - rules := coreConfig.Config.Logs.GlobalProcessingRules + rules := coreConfig.LogConfig.GlobalProcessingRules err := logsconfig.ValidateProcessingRules(rules) if err != nil { return nil, err diff --git a/agent/logs_endpoints.go b/agent/logs_endpoints.go index 6ca5822..6eeec6e 100644 --- a/agent/logs_endpoints.go +++ b/agent/logs_endpoints.go @@ -29,12 +29,12 @@ func BuildEndpoints(httpConnectivity logsconfig.HTTPConnectivity, intakeTrackTyp // BuildEndpointsWithConfig returns the endpoints to send logs. func BuildEndpointsWithConfig(endpointPrefix string, httpConnectivity logsconfig.HTTPConnectivity, intakeTrackType logsconfig.IntakeTrackType, intakeProtocol logsconfig.IntakeProtocol, intakeOrigin logsconfig.IntakeOrigin) (*logsconfig.Endpoints, error) { - logsConfig := coreconfig.Config.Logs + logsConfig := coreconfig.LogConfig if logsConfig.SendType == "http" || (bool(httpConnectivity) && !(logsConfig.SendType == "tcp")) { return BuildHTTPEndpointsWithConfig(endpointPrefix, intakeTrackType, intakeProtocol, intakeOrigin) } - return buildTCPEndpoints(logsConfig) + return buildTCPEndpoints(*logsConfig) } func buildTCPEndpoints(logsConfig coreconfig.Logs) (*logsconfig.Endpoints, error) { @@ -69,8 +69,8 @@ func BuildHTTPEndpoints(intakeTrackType logsconfig.IntakeTrackType, intakeProtoc // BuildHTTPEndpointsWithConfig uses two arguments that instructs it how to access configuration parameters, then returns the HTTP endpoints to send logs to. This function is able to default to the 'classic' BuildHTTPEndpoints() w ldHTTPEndpointsWithConfigdefault variables logsConfigDefaultKeys and httpEndpointPrefix func BuildHTTPEndpointsWithConfig(endpointPrefix string, intakeTrackType logsconfig.IntakeTrackType, intakeProtocol logsconfig.IntakeProtocol, intakeOrigin logsconfig.IntakeOrigin) (*logsconfig.Endpoints, error) { // Provide default values for legacy settings when the configuration key does not exist - logsConfig := coreconfig.Config.Logs - defaultTLS := coreconfig.Config.Logs.SendWithTLS + logsConfig := coreconfig.LogConfig + defaultTLS := coreconfig.LogConfig.SendWithTLS main := logsconfig.Endpoint{ APIKey: strings.TrimSpace(logsConfig.APIKey), @@ -130,7 +130,7 @@ func parseAddress(address string) (string, int, error) { // NewEndpoints returns a new endpoints composite with default batching settings func NewEndpoints(main logsconfig.Endpoint, useProto bool, useHTTP bool) *logsconfig.Endpoints { - logsConfig := coreconfig.Config.Logs + logsConfig := coreconfig.LogConfig return &logsconfig.Endpoints{ Main: main, Additionals: nil, diff --git a/config/config.go b/config/config.go index 0438715..be10ebd 100644 --- a/config/config.go +++ b/config/config.go @@ -47,7 +47,6 @@ type ConfigType struct { Global Global `toml:"global"` WriterOpt WriterOpt `toml:"writer_opt"` Writers []WriterOption `toml:"writers"` - Logs Logs `toml:"logs"` } var Config *ConfigType diff --git a/config/logs.go b/config/logs.go index 1e58ad5..4b62c18 100644 --- a/config/logs.go +++ b/config/logs.go @@ -1,7 +1,14 @@ package config import ( + "encoding/json" + "fmt" + "path" + + "github.com/toolkits/pkg/file" + logsconfig "flashcat.cloud/categraf/config/logs" + "flashcat.cloud/categraf/pkg/cfg" ) const ( @@ -22,39 +29,63 @@ type Logs struct { OpenFilesLimit int `toml:"open_files_limit"` ScanPeriod int `toml:"scan_period"` FrameSize int `toml:"frame_size"` - CollectContainerAll bool `toml:"container_collect_all"` + CollectContainerAll bool `toml:"collect_container_all"` GlobalProcessingRules []*logsconfig.ProcessingRule `toml:"processing_rules"` + Items []*logsconfig.LogsConfig `toml:"items"` +} + +var ( + LogConfig *Logs +) + +func InitLogConfig(configDir string) error { + configFile := path.Join(configDir, "logs.toml") + if !file.IsExist(configFile) { + return fmt.Errorf("configuration file(%s) not found", configFile) + } + + LogConfig = &Logs{} + if err := cfg.LoadConfig(configFile, LogConfig); err != nil { + return fmt.Errorf("failed to load configs of dir: %s", configDir) + } + + if Config != nil && Config.Global.PrintConfigs { + bs, _ := json.MarshalIndent(LogConfig, "", " ") + fmt.Println(string(bs)) + } + + return nil } func GetLogRunPath() string { - if len(Config.Logs.RunPath) == 0 { - Config.Logs.RunPath = "/opt/categraf/run" + if len(LogConfig.RunPath) == 0 { + LogConfig.RunPath = "/opt/categraf/run" } - return Config.Logs.RunPath + return LogConfig.RunPath } func GetLogReadTimeout() int { return 30 } func OpenLogsLimit() int { - if Config.Logs.OpenFilesLimit == 0 { - Config.Logs.OpenFilesLimit = 100 + if LogConfig.OpenFilesLimit == 0 { + LogConfig.OpenFilesLimit = 100 } - return Config.Logs.OpenFilesLimit + return LogConfig.OpenFilesLimit } func FileScanPeriod() int { - if Config.Logs.ScanPeriod == 0 { - Config.Logs.ScanPeriod = 10 + if LogConfig.ScanPeriod == 0 { + LogConfig.ScanPeriod = 10 } - return Config.Logs.ScanPeriod + return LogConfig.ScanPeriod } func LogFrameSize() int { - if Config.Logs.FrameSize == 0 { - Config.Logs.FrameSize = 9000 + if LogConfig.FrameSize == 0 { + LogConfig.FrameSize = 9000 } - return Config.Logs.FrameSize + return LogConfig.FrameSize } func ValidatePodContainerID() bool { @@ -66,5 +97,5 @@ func IsFeaturePresent(t string) bool { } func GetContainerCollectAll() bool { - return Config.Logs.CollectContainerAll + return LogConfig.CollectContainerAll } diff --git a/inputs/cpu/logs.go b/inputs/cpu/logs.go deleted file mode 100644 index 54c518d..0000000 --- a/inputs/cpu/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package cpu - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (c *CPUStats) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/disk/logs.go b/inputs/disk/logs.go deleted file mode 100644 index 050fe92..0000000 --- a/inputs/disk/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package disk - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (s *DiskStats) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/diskio/logs.go b/inputs/diskio/logs.go deleted file mode 100644 index 87383d5..0000000 --- a/inputs/diskio/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package diskio - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (d *DiskIO) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/exec/logs.go b/inputs/exec/logs.go deleted file mode 100644 index 23ba839..0000000 --- a/inputs/exec/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package exec - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (e *Exec) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/http_response/logs.go b/inputs/http_response/logs.go deleted file mode 100644 index 5ad17c5..0000000 --- a/inputs/http_response/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package http_response - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (c *HTTPResponse) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/inputs.go b/inputs/inputs.go index 2582d75..29187c0 100644 --- a/inputs/inputs.go +++ b/inputs/inputs.go @@ -2,7 +2,6 @@ package inputs import ( "flashcat.cloud/categraf/config" - logsconfig "flashcat.cloud/categraf/config/logs" "flashcat.cloud/categraf/pkg/conv" "flashcat.cloud/categraf/types" "github.com/toolkits/pkg/container/list" @@ -14,7 +13,6 @@ type Input interface { Prefix() string GetInterval() config.Duration Gather(slist *list.SafeList) - LogsConfig() []*logsconfig.LogsConfig } type Creator func() Input diff --git a/inputs/kernel/logs.go b/inputs/kernel/logs.go deleted file mode 100644 index 416a5da..0000000 --- a/inputs/kernel/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package kernel - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (s *KernelStats) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/kernel_vmstat/logs.go b/inputs/kernel_vmstat/logs.go deleted file mode 100644 index e398c39..0000000 --- a/inputs/kernel_vmstat/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package kernel_vmstat - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (s *KernelVmstat) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/linux_sysctl_fs/logs.go b/inputs/linux_sysctl_fs/logs.go deleted file mode 100644 index 0758a05..0000000 --- a/inputs/linux_sysctl_fs/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package linux_sysctl_fs - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (c *SysctlFS) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/logs/logs.go b/inputs/logs/logs.go deleted file mode 100644 index f01b974..0000000 --- a/inputs/logs/logs.go +++ /dev/null @@ -1,13 +0,0 @@ -package logs - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -type Logs struct { - Log []*logsconfig.LogsConfig `toml:"logs"` -} - -func (l Logs) LogsConfig() []*logsconfig.LogsConfig { - return l.Log -} diff --git a/inputs/mem/logs.go b/inputs/mem/logs.go deleted file mode 100644 index ed98fbd..0000000 --- a/inputs/mem/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package mem - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (c *MemStats) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/mysql/mysql.go b/inputs/mysql/mysql.go index 8a0a868..09e4761 100644 --- a/inputs/mysql/mysql.go +++ b/inputs/mysql/mysql.go @@ -11,7 +11,6 @@ import ( "flashcat.cloud/categraf/config" "flashcat.cloud/categraf/inputs" - "flashcat.cloud/categraf/inputs/logs" "flashcat.cloud/categraf/pkg/tls" "flashcat.cloud/categraf/types" "github.com/go-sql-driver/mysql" @@ -155,7 +154,6 @@ func (ins *Instance) InitValidMetrics() { type MySQL struct { config.Interval Instances []*Instance `toml:"instances"` - logs.Logs Counter uint64 wg sync.WaitGroup diff --git a/inputs/net/logs.go b/inputs/net/logs.go deleted file mode 100644 index 7f2bb1f..0000000 --- a/inputs/net/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package net - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (n *NetIOStats) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/net_response/logs.go b/inputs/net_response/logs.go deleted file mode 100644 index 10f122f..0000000 --- a/inputs/net_response/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package net_response - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (n *NetResponse) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/netstat/logs.go b/inputs/netstat/logs.go deleted file mode 100644 index 65d0928..0000000 --- a/inputs/netstat/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package netstat - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (n *NetStats) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/ntp/logs.go b/inputs/ntp/logs.go deleted file mode 100644 index 081c2b3..0000000 --- a/inputs/ntp/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package ntp - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (n *NTPStat) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/nvidia_smi/logs.go b/inputs/nvidia_smi/logs.go deleted file mode 100644 index 316b977..0000000 --- a/inputs/nvidia_smi/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package nvidia_smi - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (g *GPUStats) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/oracle/oracle.go b/inputs/oracle/oracle.go index 066960c..3c940e6 100644 --- a/inputs/oracle/oracle.go +++ b/inputs/oracle/oracle.go @@ -14,7 +14,6 @@ import ( "flashcat.cloud/categraf/config" "flashcat.cloud/categraf/inputs" - "flashcat.cloud/categraf/inputs/logs" "flashcat.cloud/categraf/pkg/conv" "flashcat.cloud/categraf/types" "github.com/godror/godror" @@ -49,9 +48,8 @@ type MetricConfig struct { type Oracle struct { config.Interval - Instances []OrclInstance `toml:"instances"` - Metrics []MetricConfig `toml:"metrics"` - logs.Logs + Instances []OrclInstance `toml:"instances"` + Metrics []MetricConfig `toml:"metrics"` dbconnpool map[string]*sqlx.DB // key: instance Counter uint64 wg sync.WaitGroup diff --git a/inputs/ping/logs.go b/inputs/ping/logs.go deleted file mode 100644 index 1e91b97..0000000 --- a/inputs/ping/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package ping - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (c *Ping) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/processes/logs.go b/inputs/processes/logs.go deleted file mode 100644 index 25ec413..0000000 --- a/inputs/processes/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package processes - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (c *Processes) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/procstat/logs.go b/inputs/procstat/logs.go deleted file mode 100644 index 9fa9bd3..0000000 --- a/inputs/procstat/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package procstat - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (c *Procstat) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/prometheus/prometheus.go b/inputs/prometheus/prometheus.go index 6894fe3..b1876e3 100644 --- a/inputs/prometheus/prometheus.go +++ b/inputs/prometheus/prometheus.go @@ -14,7 +14,6 @@ import ( "flashcat.cloud/categraf/config" "flashcat.cloud/categraf/inputs" - "flashcat.cloud/categraf/inputs/logs" "flashcat.cloud/categraf/parser/prometheus" "flashcat.cloud/categraf/pkg/filter" "flashcat.cloud/categraf/pkg/tls" @@ -100,7 +99,6 @@ func (ins *Instance) createHTTPClient() (*http.Client, error) { type Prometheus struct { config.Interval Instances []*Instance `toml:"instances"` - logs.Logs Counter uint64 wg sync.WaitGroup diff --git a/inputs/rabbitmq/rabbitmq.go b/inputs/rabbitmq/rabbitmq.go index df044af..a5c7f6d 100644 --- a/inputs/rabbitmq/rabbitmq.go +++ b/inputs/rabbitmq/rabbitmq.go @@ -13,7 +13,6 @@ import ( "flashcat.cloud/categraf/config" "flashcat.cloud/categraf/inputs" - "flashcat.cloud/categraf/inputs/logs" "flashcat.cloud/categraf/pkg/filter" "flashcat.cloud/categraf/pkg/tls" "flashcat.cloud/categraf/types" @@ -27,7 +26,6 @@ type RabbitMQ struct { counter uint64 waitgrp sync.WaitGroup Instances []*Instance `toml:"instances"` - logs.Logs } func init() { diff --git a/inputs/redis/redis.go b/inputs/redis/redis.go index f7d95e1..c5604e3 100644 --- a/inputs/redis/redis.go +++ b/inputs/redis/redis.go @@ -14,7 +14,6 @@ import ( "flashcat.cloud/categraf/config" "flashcat.cloud/categraf/inputs" - "flashcat.cloud/categraf/inputs/logs" "flashcat.cloud/categraf/pkg/conv" "flashcat.cloud/categraf/pkg/tls" "flashcat.cloud/categraf/types" @@ -67,7 +66,6 @@ func (ins *Instance) Init() error { type Redis struct { config.Interval Instances []*Instance `toml:"instances"` - logs.Logs Counter uint64 wg sync.WaitGroup diff --git a/inputs/system/logs.go b/inputs/system/logs.go deleted file mode 100644 index 1ce4757..0000000 --- a/inputs/system/logs.go +++ /dev/null @@ -1,9 +0,0 @@ -package system - -import ( - logsconfig "flashcat.cloud/categraf/config/logs" -) - -func (s *SystemStats) LogsConfig() []*logsconfig.LogsConfig { - return nil -} diff --git a/inputs/tomcat/tomcat.go b/inputs/tomcat/tomcat.go index 70c1d70..287c37d 100644 --- a/inputs/tomcat/tomcat.go +++ b/inputs/tomcat/tomcat.go @@ -13,7 +13,6 @@ import ( "flashcat.cloud/categraf/config" "flashcat.cloud/categraf/inputs" - "flashcat.cloud/categraf/inputs/logs" "flashcat.cloud/categraf/pkg/tls" "flashcat.cloud/categraf/types" "github.com/toolkits/pkg/container/list" @@ -136,7 +135,6 @@ func (ins *Instance) createHTTPClient() (*http.Client, error) { type Tomcat struct { config.Interval Instances []*Instance `toml:"instances"` - logs.Logs Counter uint64 wg sync.WaitGroup diff --git a/main.go b/main.go index 1f06d6e..0770618 100644 --- a/main.go +++ b/main.go @@ -61,7 +61,10 @@ func main() { if err := config.InitConfig(*configDir, *debugMode, *testMode); err != nil { log.Fatalln("F! failed to init config:", err) } - + // init log config + if err := config.InitLogConfig(*configDir); err != nil { + log.Fatalln("F! failed to init config:", err) + } // init writers if err := writer.Init(config.Config.Writers); err != nil { log.Fatalln("F! failed to init writer:", err) diff --git a/pkg/cfg/cfg.go b/pkg/cfg/cfg.go index 4424d39..c7e39e7 100644 --- a/pkg/cfg/cfg.go +++ b/pkg/cfg/cfg.go @@ -39,3 +39,26 @@ func LoadConfigs(configDir string, configPtr interface{}) error { return m.Load(configPtr) } + +func LoadConfig(configFile string, configPtr interface{}) error { + var ( + loader multiconfig.Loader + ) + + if strings.HasSuffix(configFile, "toml") { + loader = &multiconfig.TOMLLoader{Path: configFile} + } + if strings.HasSuffix(configFile, "json") { + loader = &multiconfig.JSONLoader{Path: configFile} + } + if strings.HasSuffix(configFile, "yaml") || strings.HasSuffix(configFile, "yml") { + loader = &multiconfig.YAMLLoader{Path: configFile} + } + + m := multiconfig.DefaultLoader{ + Loader: multiconfig.MultiLoader(loader), + Validator: multiconfig.MultiValidator(&multiconfig.RequiredValidator{}), + } + + return m.Load(configPtr) +}