123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- package hieda_yamlutil
- import (
- "fmt"
- "git.swzry.com/zry/GoHiedaLogger/hiedabke_alisls"
- "git.swzry.com/zry/GoHiedaLogger/hiedabke_writer"
- "git.swzry.com/zry/GoHiedaLogger/hiedalog"
- "gopkg.in/natefinch/lumberjack.v2"
- "io"
- "os"
- )
- func (hyu *HiedaLogYamlUtil) parseConsoleBackend(backend CommonLogConfigYAML_Backend) (hiedalog.HiedaLogBackend, error) {
- if backend.ConsoleConfig == nil {
- return nil, fmt.Errorf("no field named 'console_config' for backend type 'console'")
- }
- switch backend.ConsoleConfig.To {
- case "stdout":
- return NewSimpleConsoleBackend(os.Stdout), nil
- case "stderr":
- return NewSimpleConsoleBackend(os.Stderr), nil
- default:
- return nil, fmt.Errorf("invalid target '%s' for 'to' field of 'console_config'", backend.ConsoleConfig.To)
- }
- }
- func (hyu *HiedaLogYamlUtil) parseFileBackend(backend CommonLogConfigYAML_Backend) (hiedalog.HiedaLogBackend, error) {
- if backend.FileConfig == nil {
- return nil, fmt.Errorf("no field named 'file_config' for backend type 'file'")
- }
- var iof io.Writer
- if backend.FileConfig.Rotate {
- if backend.FileConfig.RotateConfig == nil {
- return nil, fmt.Errorf("rotate enabled but no field named 'rotate_config'")
- }
- iof = &lumberjack.Logger{
- Filename: backend.FileConfig.Filename,
- MaxSize: backend.FileConfig.RotateConfig.MaxSize,
- MaxAge: backend.FileConfig.RotateConfig.MaxAge,
- MaxBackups: backend.FileConfig.RotateConfig.MaxBackups,
- LocalTime: backend.FileConfig.RotateConfig.LocalTime,
- Compress: backend.FileConfig.RotateConfig.Compress,
- }
- } else {
- var err error
- iof, err = os.OpenFile(backend.FileConfig.Filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
- if err != nil {
- return nil, err
- }
- }
- if backend.FileConfig.FVConsole {
- return NewSimpleConsoleBackend(iof), nil
- }
- return hiedabke_writer.NewHiedaBackendWriter(iof), nil
- }
- func (hyu *HiedaLogYamlUtil) parseAlislsBackend(backend CommonLogConfigYAML_Backend) (hiedalog.HiedaLogBackend, error) {
- if backend.AliSLSConfig == nil {
- return nil, fmt.Errorf("no field named 'alisls_config' for backend type 'alisls'")
- }
- bac := backend.AliSLSConfig
- var srcip string
- if bac.OverrideWithRealIP {
- rip, err := getInternetIP()
- if err != nil {
- srcip = bac.EmitIP
- } else {
- srcip = rip
- }
- } else {
- srcip = bac.EmitIP
- }
- alicfg := hiedabke_alisls.AliSLSConfig{
- DebugMode: bac.EnableAliSLSProducerDebug,
- AccessKeyID: bac.Appkey,
- AccessKeySecret: bac.Secret,
- Endpoint: bac.Endpoint,
- Project: bac.Project,
- Logstore: bac.Logstore,
- Topic: bac.Topic,
- Hostname: bac.Hostname,
- AppName: bac.AppName,
- SourceIP: srcip,
- }
- var aliextcfg *hiedabke_alisls.AliSLSConfigExtend
- if bac.ExtendAliSLSConfig == nil {
- aliextcfg = nil
- } else {
- aec := bac.ExtendAliSLSConfig
- aliextcfg = &hiedabke_alisls.AliSLSConfigExtend{
- TotalSizeLnBytes: aec.TotalSizeLnBytes,
- MaxIoWorkerCount: aec.MaxIoWorkerCount,
- MaxBlockSec: aec.MaxBlockSec,
- MaxBatchSize: aec.MaxBatchSize,
- MaxBatchCount: aec.MaxBatchCount,
- LingerMs: aec.LingerMs,
- Retries: aec.Retries,
- MaxReservedAttempts: aec.MaxReservedAttempts,
- BaseRetryBackoffMs: aec.BaseRetryBackoffMs,
- MaxRetryBackoffMs: aec.MaxRetryBackoffMs,
- AdjustShargHash: aec.AdjustShargHash,
- Buckets: aec.Buckets,
- AllowLogLevel: aec.AllowLogLevel,
- LogFileName: aec.LogFileName,
- IsJsonType: aec.IsJsonType,
- LogMaxSize: aec.LogMaxSize,
- LogMaxBackups: aec.LogMaxBackups,
- LogCompress: aec.LogCompress,
- NoRetryStatusCodeList: aec.NoRetryStatusCodeList,
- }
- }
- ah := hiedabke_alisls.NewHiedaBackendAliSLS(alicfg, aliextcfg)
- hyu.alisls_bknlist = append(hyu.alisls_bknlist, ah)
- return ah, nil
- }
- func getInternetIP() (string, error) {
- return "", fmt.Errorf("not supported yet")
- }
- type HiedaLogYamlUtil struct {
- alisls_bknlist []*hiedabke_alisls.HiedaBackendAliSLS
- Logger *hiedalog.HiedaLogger
- }
- func (hyu *HiedaLogYamlUtil) StartAliSLS() {
- for _, v := range hyu.alisls_bknlist {
- v.StartProducer()
- }
- }
- func (hyu *HiedaLogYamlUtil) SafeShutdown() {
- for _, v := range hyu.alisls_bknlist {
- v.SafeStopProducer()
- }
- }
- func (hyu *HiedaLogYamlUtil) Shutdown(timeout_ms int64) error {
- for _, v := range hyu.alisls_bknlist {
- err := v.StopProducer(timeout_ms)
- if err != nil {
- return err
- }
- }
- return nil
- }
- func CreateHiedaLoggerFromYAMLData(cfgdata CommonLogConfigYAML, autoStartAliSLS bool) (*HiedaLogYamlUtil, error) {
- hyu := &HiedaLogYamlUtil{
- Logger: hiedalog.NewHiedaLogger(),
- alisls_bknlist: make([]*hiedabke_alisls.HiedaBackendAliSLS, 0),
- }
- if cfgdata.Enable {
- if cfgdata.Backends != nil {
- for k, v := range cfgdata.Backends {
- lvi := hyu.Logger.LevelFilter.NameToID(v.Level)
- if lvi == 7 {
- return nil, fmt.Errorf("unsupported log level '%s' in backend '%s'", v.Level, k)
- }
- var cins hiedalog.HiedaLogBackend
- var err error
- switch v.Type {
- case "console":
- cins, err = hyu.parseConsoleBackend(v)
- case "file":
- cins, err = hyu.parseFileBackend(v)
- case "alisls":
- cins, err = hyu.parseAlislsBackend(v)
- default:
- return nil, fmt.Errorf("unsupported log backend type '%s' in backend '%s'", v.Type, k)
- }
- if err != nil {
- return nil, err
- }
- hyu.Logger.AddBackend(cins, lvi)
- }
- }
- }
- if autoStartAliSLS {
- hyu.StartAliSLS()
- }
- return hyu, nil
- }
|