@@ -11,41 +11,62 @@ import (
1111
1212const LogConfigFilePath = "../config/log.yaml"
1313
14+ var levelMap = map [string ]slog.Level {
15+ "DEBUG" : slog .LevelDebug ,
16+ "INFO" : slog .LevelInfo ,
17+ "WARN" : slog .LevelWarn ,
18+ "ERROR" : slog .LevelError ,
19+ }
20+
1421type MultiHandler struct {
1522 subHandlers []slog.Handler
16- level slog.Level
23+ }
24+
25+ type OutputType struct {
26+ Type string `yaml:"type"`
27+ Level string `yaml:"level"`
1728}
1829
1930type LogConfig struct {
2031 Output struct {
21- Types []string `yaml:"types"`
22- Directory string `yaml:"directory"`
32+ Types []OutputType `yaml:"types"`
33+ Directory string `yaml:"directory"`
2334 } `yaml:"output"`
2435 Components []string `yaml:"components"`
2536}
2637
27- func NewMultiHandler (level slog. Level , writers [] io.Writer ) * MultiHandler {
38+ func NewMultiHandler (writerLevels map [ io.Writer ]slog. Level ) * MultiHandler {
2839 var handlers []slog.Handler
2940
30- for _ , writer := range writers {
31- handlers = append (handlers , slog .NewJSONHandler (writer , nil ))
41+ for writer , level := range writerLevels {
42+ handlers = append (handlers , slog .NewJSONHandler (writer , & slog. HandlerOptions { Level : level } ))
3243 }
3344
3445 m := MultiHandler {
35- level : level ,
3646 subHandlers : handlers ,
3747 }
3848 return & m
3949}
4050
41- func (h * MultiHandler ) Enabled (ctx context.Context , level slog.Level ) bool { return h .level <= level }
42- func (h * MultiHandler ) WithAttrs (attrs []slog.Attr ) slog.Handler { return h }
43- func (h * MultiHandler ) WithGroup (name string ) slog.Handler { return h }
51+ func (h * MultiHandler ) Enabled (ctx context.Context , level slog.Level ) bool {
52+ for _ , handler := range h .subHandlers {
53+ if handler .Enabled (ctx , level ) {
54+ return true
55+ }
56+ }
57+ return false
58+
59+ }
60+
61+ func (h * MultiHandler ) WithAttrs (attrs []slog.Attr ) slog.Handler { return h }
62+ func (h * MultiHandler ) WithGroup (name string ) slog.Handler { return h }
4463func (h * MultiHandler ) Handle (ctx context.Context , record slog.Record ) error {
4564 var err error
4665 for _ , handler := range h .subHandlers {
47- if out := handler .Handle (ctx , record ); out != nil {
48- err = out
66+ if handler .Enabled (ctx , record .Level ) {
67+ if out := handler .Handle (ctx , record ); out != nil {
68+ err = out
69+ }
4970 }
5071 }
5172 return err
@@ -72,11 +93,11 @@ func createLogger(component string) (*slog.Logger, error) {
7293 if err != nil {
7394 return nil , err
7495 }
75- var writers [] io.Writer
96+ writerLevels := make ( map [ io.Writer ]slog. Level )
7697 for _ , t := range logConfig .Output .Types {
77- switch t {
98+ switch t . Type {
7899 case "stdout" :
79- writers = append ( writers , os . Stdout )
100+ writerLevels [ os . Stdout ] = levelMap [ t . Level ]
80101 case "file" :
81102 directory := logConfig .Output .Directory
82103
@@ -89,11 +110,10 @@ func createLogger(component string) (*slog.Logger, error) {
89110 if err != nil {
90111 return nil , err
91112 }
92- writers = append (writers , file )
93-
113+ writerLevels [file ] = levelMap [t .Level ]
94114 }
95115 }
96- handler := NewMultiHandler (slog . LevelInfo , writers )
116+ handler := NewMultiHandler (writerLevels )
97117 logger := slog .New (handler ).With ("component" , component )
98118 return logger , nil
99119}
0 commit comments