@@ -12,6 +12,11 @@ import (
1212
1313const DefaultLevel = "info"
1414
15+ const (
16+ persistKeyArg = "$persist"
17+ PersistTimeArg = "$persist_time"
18+ )
19+
1520var levels = map [string ]slog.Level {
1621"debug" : slog .LevelDebug ,
1722DefaultLevel : slog .LevelInfo ,
@@ -36,16 +41,16 @@ func ValidLevels() []string {
3641return keys
3742}
3843
39- func NewLogger (opts Options ) * Logger {
44+ func NewLogger (opts Options ) Interface {
4045logger := & Logger {}
41- broker := pubsub .NewBroker [Message ]()
46+ broker := pubsub .NewBroker [LogMessage ]()
4247writer := & writer {
43- messages : []Message {},
48+ messages : []LogMessage {},
4449Broker : broker ,
4550}
4651
4752handler := slog .NewTextHandler (
48- io .MultiWriter (append ( opts . AdditionalWriters , writer ) ... ),
53+ io .MultiWriter (writer ),
4954& slog.HandlerOptions {
5055Level : slog .Level (levels [opts .Level ]),
5156},
@@ -57,15 +62,51 @@ func NewLogger(opts Options) *Logger {
5762}
5863
5964type Options struct {
60- Level string
61- AdditionalWriters []io.Writer
65+ Level string
6266}
6367
6468type Logger struct {
6569logger * slog.Logger
6670writer * writer
6771}
6872
73+ func (l * Logger ) SetLevel (level string ) {
74+ if _ , ok := levels [level ]; ! ok {
75+ level = DefaultLevel
76+ }
77+ handler := slog .NewTextHandler (
78+ io .MultiWriter (l .writer ),
79+ & slog.HandlerOptions {
80+ Level : levels [level ],
81+ },
82+ )
83+ l .logger = slog .New (handler )
84+ }
85+
86+ // PersistDebug implements Interface.
87+ func (l * Logger ) PersistDebug (msg string , args ... any ) {
88+ args = append (args , persistKeyArg , true )
89+ l .Debug (msg , args ... )
90+ }
91+
92+ // PersistError implements Interface.
93+ func (l * Logger ) PersistError (msg string , args ... any ) {
94+ args = append (args , persistKeyArg , true )
95+ l .Error (msg , args ... )
96+ }
97+
98+ // PersistInfo implements Interface.
99+ func (l * Logger ) PersistInfo (msg string , args ... any ) {
100+ args = append (args , persistKeyArg , true )
101+ l .Info (msg , args ... )
102+ }
103+
104+ // PersistWarn implements Interface.
105+ func (l * Logger ) PersistWarn (msg string , args ... any ) {
106+ args = append (args , persistKeyArg , true )
107+ l .Warn (msg , args ... )
108+ }
109+
69110func (l * Logger ) Debug (msg string , args ... any ) {
70111l .logger .Debug (msg , args ... )
71112}
@@ -82,19 +123,19 @@ func (l *Logger) Error(msg string, args ...any) {
82123l .logger .Error (msg , args ... )
83124}
84125
85- func (l * Logger ) List () []Message {
126+ func (l * Logger ) List () []LogMessage {
86127return l .writer .messages
87128}
88129
89- func (l * Logger ) Get (id string ) (Message , error ) {
130+ func (l * Logger ) Get (id string ) (LogMessage , error ) {
90131for _ , msg := range l .writer .messages {
91132if msg .ID == id {
92133return msg , nil
93134}
94135}
95- return Message {}, io .EOF
136+ return LogMessage {}, io .EOF
96137}
97138
98- func (l * Logger ) Subscribe (ctx context.Context ) <- chan pubsub.Event [Message ] {
139+ func (l * Logger ) Subscribe (ctx context.Context ) <- chan pubsub.Event [LogMessage ] {
99140return l .writer .Subscribe (ctx )
100141}
0 commit comments