some changes with config.log.output

This commit is contained in:
2025-08-02 00:53:19 +03:00
parent 3cbea14e84
commit c77d51a95c
4 changed files with 34 additions and 27 deletions

View File

@@ -193,8 +193,10 @@ func InitConfigReplHook(_ context.Context, cs *corestate.CoreState, x *app.AppX)
replacements := map[string]any{ replacements := map[string]any{
"%tmp%": filepath.Clean(run_manager.RuntimeDir()), "%tmp%": filepath.Clean(run_manager.RuntimeDir()),
"%path%": *x.Config.Env.NodePath, "%path%": *x.Config.Env.NodePath,
"%stdout%": os.Stdout, "%stdout%": "_1STDout",
"%stderr%": os.Stderr, "%stderr%": "_2STDerr",
"%1%": "_1STDout",
"%2%": "_2STDerr",
} }
processConfig(&x.Config.Conf, replacements) processConfig(&x.Config.Conf, replacements)
@@ -301,10 +303,32 @@ func processConfig(conf any, replacements map[string]any) error {
case reflect.Ptr: case reflect.Ptr:
if !val.IsNil() { if !val.IsNil() {
return processConfig(val.Interface(), replacements) elem := val.Elem()
if elem.Kind() == reflect.String {
str := elem.String()
if replacement, exists := replacements[str]; exists {
strVal, err := toString(replacement)
if err != nil {
return fmt.Errorf("cannot convert replacement to string: %v", err)
}
elem.SetString(strVal)
} else {
for placeholder, replacement := range replacements {
if strings.Contains(str, placeholder) {
replacementStr, err := toString(replacement)
if err != nil {
return fmt.Errorf("invalid replacement for %q: %v", placeholder, err)
}
newStr := strings.ReplaceAll(str, placeholder, replacementStr)
elem.SetString(newStr)
}
}
}
} else {
return processConfig(elem.Addr().Interface(), replacements)
}
} }
} }
return nil return nil
} }

View File

@@ -60,7 +60,7 @@ func (c *Compositor) LoadConf(path string) error {
v.SetDefault("updates.wanted_version", "latest-stable") v.SetDefault("updates.wanted_version", "latest-stable")
v.SetDefault("log.json_format", "false") v.SetDefault("log.json_format", "false")
v.SetDefault("log.level", "info") v.SetDefault("log.level", "info")
v.SetDefault("log.output", "%stdout%") v.SetDefault("log.output", "%1%")
if err := v.ReadInConfig(); err != nil { if err := v.ReadInConfig(); err != nil {
return fmt.Errorf("error reading config: %w", err) return fmt.Errorf("error reading config: %w", err)

View File

@@ -57,7 +57,7 @@ type Updates struct {
type Log struct { type Log struct {
JSON *bool `mapstructure:"json_format"` JSON *bool `mapstructure:"json_format"`
Level *string `mapstructure:"level"` Level *string `mapstructure:"level"`
OutPath any `mapstructure:"output"` OutPath *string `mapstructure:"output"`
} }
// ConfigEnv structure for environment variables // ConfigEnv structure for environment variables

View File

@@ -6,7 +6,6 @@ package logs
import ( import (
"bytes" "bytes"
"context" "context"
"fmt"
"io" "io"
"log/slog" "log/slog"
"os" "os"
@@ -58,30 +57,14 @@ func SetupLogger(o *config.Log) (*slog.Logger, error) {
handlerOpts.Level = slog.LevelInfo handlerOpts.Level = slog.LevelInfo
} }
switch o.OutPath { switch *o.OutPath {
case 1: case "_1STDout":
writer = os.Stdout writer = os.Stdout
case 2: case "_2STDerr":
writer = os.Stderr
case os.Stdout:
writer = os.Stdout
case os.Stderr:
writer = os.Stderr writer = os.Stderr
default: default:
var path string
switch v := o.OutPath.(type) {
case string:
path = v
case int, int64, float64:
path = fmt.Sprint(v)
case fmt.Stringer:
path = v.String()
default:
path = fmt.Sprint(v)
}
logFile := &lumberjack.Logger{ logFile := &lumberjack.Logger{
Filename: filepath.Join(path, "event.log"), Filename: filepath.Join(*o.OutPath, "event.log"),
MaxSize: 10, MaxSize: 10,
MaxBackups: 5, MaxBackups: 5,
MaxAge: 28, MaxAge: 28,