feat: add log-format flag

This commit is contained in:
ayn2op 2025-04-30 16:43:03 -04:00
parent c0509bf08c
commit a370535cc1
2 changed files with 43 additions and 11 deletions

View file

@ -20,8 +20,10 @@ var (
var (
rootCmd = &cobra.Command{
PreRunE: func(cmd *cobra.Command, args []string) error {
flags := cmd.Flags()
var level slog.Level
switch str, _ := cmd.Flags().GetString("log-level"); str {
switch s, _ := flags.GetString("log-level"); s {
case "debug":
level = slog.LevelDebug
case "info":
@ -32,7 +34,15 @@ var (
level = slog.LevelError
}
return logger.Load(level)
var format logger.Format
switch s, _ := flags.GetString("log-format"); s {
case "text":
format = logger.FormatText
case "json":
format = logger.FormatJson
}
return logger.Load(format, level)
},
RunE: func(cmd *cobra.Command, args []string) error {
@ -77,5 +87,7 @@ var (
func init() {
flags := rootCmd.Flags()
flags.StringP("token", "t", "", "the authentication token")
flags.StringP("log-level", "l", "info", "log level")
flags.String("log-level", "info", "log level")
flags.String("log-format", "text", "log format")
}

View file

@ -8,10 +8,15 @@ import (
"github.com/ayn2op/discordo/internal/consts"
)
const fileName = "logs.txt"
type Format int
const (
FormatText Format = iota
FormatJson
)
// Opens the log file and configures default logger.
func Load(level slog.Level) error {
func Load(format Format, level slog.Level) error {
path, err := os.UserCacheDir()
if err != nil {
return err
@ -22,13 +27,28 @@ func Load(level slog.Level) error {
return err
}
path = filepath.Join(path, fileName)
file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, os.ModePerm)
if err != nil {
return err
opts := &slog.HandlerOptions{AddSource: true, Level: level}
var h slog.Handler
switch format {
case FormatText:
path := filepath.Join(path, "logs.txt")
file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, os.ModePerm)
if err != nil {
return err
}
h = slog.NewTextHandler(file, opts)
case FormatJson:
path := filepath.Join(path, "logs.json")
file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, os.ModePerm)
if err != nil {
return err
}
h = slog.NewJSONHandler(file, opts)
}
l := slog.New(slog.NewTextHandler(file, &slog.HandlerOptions{AddSource: true, Level: level}))
slog.SetDefault(l)
slog.SetDefault(slog.New(h))
return nil
}