mirror of
https://github.com/akyaiy/GoSally-mvp.git
synced 2026-01-03 19:52:25 +00:00
logs
This commit is contained in:
@@ -19,3 +19,6 @@ func SetBrightBlue(s string) string { return fmt.Sprintf("\033[94m%s\033[0m",
|
|||||||
func SetBrightMagenta(s string) string { return fmt.Sprintf("\033[95m%s\033[0m", s) }
|
func SetBrightMagenta(s string) string { return fmt.Sprintf("\033[95m%s\033[0m", s) }
|
||||||
func SetBrightCyan(s string) string { return fmt.Sprintf("\033[96m%s\033[0m", s) }
|
func SetBrightCyan(s string) string { return fmt.Sprintf("\033[96m%s\033[0m", s) }
|
||||||
func SetBrightWhite(s string) string { return fmt.Sprintf("\033[97m%s\033[0m", s) }
|
func SetBrightWhite(s string) string { return fmt.Sprintf("\033[97m%s\033[0m", s) }
|
||||||
|
|
||||||
|
func PrintError() string { return SetRed("Error") }
|
||||||
|
func PrintWarn() string { return SetYellow("Warning") }
|
||||||
|
|||||||
@@ -4,29 +4,84 @@
|
|||||||
package logs
|
package logs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"io"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/akyaiy/GoSally-mvp/core/config"
|
||||||
|
"github.com/akyaiy/GoSally-mvp/core/run_manager"
|
||||||
|
"gopkg.in/natefinch/lumberjack.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Environment constants for logger setup
|
var GlobalLevel slog.Level
|
||||||
const (
|
|
||||||
// envDev enables development logging with debug level
|
type SlogWriter struct {
|
||||||
envDev = "dev"
|
Logger *slog.Logger
|
||||||
// envProd enables production logging with info level
|
Level slog.Level
|
||||||
envProd = "prod"
|
}
|
||||||
)
|
|
||||||
|
func (w *SlogWriter) Write(p []byte) (n int, err error) {
|
||||||
|
msg := string(bytes.TrimSpace(p))
|
||||||
|
w.Logger.Log(context.TODO(), w.Level, msg)
|
||||||
|
return len(p), nil
|
||||||
|
}
|
||||||
|
|
||||||
// SetupLogger initializes and returns a logger based on the provided environment.
|
// SetupLogger initializes and returns a logger based on the provided environment.
|
||||||
func SetupLogger(env string) *slog.Logger {
|
func SetupLogger(o config.Log) (*slog.Logger, error) {
|
||||||
var log *slog.Logger
|
var handlerOpts = slog.HandlerOptions{}
|
||||||
switch env {
|
var writer io.Writer = os.Stdout
|
||||||
case envDev:
|
|
||||||
log = slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelDebug}))
|
switch o.Level {
|
||||||
case envProd:
|
case "debug":
|
||||||
log = slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo}))
|
GlobalLevel = slog.LevelDebug
|
||||||
|
handlerOpts.Level = slog.LevelDebug
|
||||||
|
case "info":
|
||||||
|
GlobalLevel = slog.LevelInfo
|
||||||
|
handlerOpts.Level = slog.LevelInfo
|
||||||
default:
|
default:
|
||||||
log = slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelDebug}))
|
GlobalLevel = slog.LevelInfo
|
||||||
|
handlerOpts.Level = slog.LevelInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
return log
|
if o.OutPath != "" {
|
||||||
|
repl := map[string]string{
|
||||||
|
"tmp": filepath.Clean(run_manager.RuntimeDir()),
|
||||||
|
}
|
||||||
|
re := regexp.MustCompile(`%(\w+)%`)
|
||||||
|
result := re.ReplaceAllStringFunc(o.OutPath, func(match string) string {
|
||||||
|
sub := re.FindStringSubmatch(match)
|
||||||
|
if len(sub) < 2 {
|
||||||
|
return match
|
||||||
|
}
|
||||||
|
key := sub[1]
|
||||||
|
if val, ok := repl[key]; ok {
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
return match
|
||||||
|
})
|
||||||
|
|
||||||
|
if strings.Contains(o.OutPath, "%tmp%") {
|
||||||
|
relPath := strings.TrimPrefix(result, filepath.Clean(run_manager.RuntimeDir()))
|
||||||
|
if err := run_manager.SetDir(relPath); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logFile := &lumberjack.Logger{
|
||||||
|
Filename: filepath.Join(result, "event.log"),
|
||||||
|
MaxSize: 10,
|
||||||
|
MaxBackups: 5,
|
||||||
|
MaxAge: 28,
|
||||||
|
Compress: true,
|
||||||
|
}
|
||||||
|
writer = logFile
|
||||||
|
}
|
||||||
|
|
||||||
|
log := slog.New(slog.NewJSONHandler(writer, &handlerOpts))
|
||||||
|
return log, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user