package slog import ( "fmt" "os" ) func (l *Logger) Infof(format string, args ...any) { l.print(INFO, fmt.Sprintf(format, args...)) } func (l *Logger) Info(m ...any) { l.print(INFO, m...) } func (l *Logger) Infoln(m ...any) { l.println(INFO, m...) } func (l *Logger) Warnf(format string, args ...any) { l.print(WARN, fmt.Sprintf(format, args...)) } func (l *Logger) Warn(m ...any) { l.print(WARN, m...) } func (l *Logger) Warnln(m ...any) { l.println(WARN, m...) } func (l *Logger) Errorf(format string, args ...any) { l.print(ERROR, fmt.Sprintf(format, args...)) } func (l *Logger) Error(m ...any) { l.print(ERROR, m...) } func (l *Logger) Errorln(m ...any) { l.println(ERROR, m...) } func (l *Logger) Fatalf(format string, args ...any) { l.print(FATAL, fmt.Sprintf(format, args...)) os.Exit(1) } func (l *Logger) Fatal(m ...any) { l.print(FATAL, m...) os.Exit(1) } func (l *Logger) Fatalln(m ...any) { l.println(FATAL, m...) os.Exit(1) } func (l *Logger) Debugf(format string, args ...any) { l.print(DEBUG, fmt.Sprintf(format, args...)) } func (l *Logger) Debug(m ...any) { l.print(DEBUG, m...) } func (l *Logger) Debugln(m ...any) { l.println(DEBUG, m...) } // Write message without trailing "\n" // Good for database func (l *Logger) print(level LogLevel, m ...any) { if l.level.n < level.n { return } tb := getFullTraceback(0) for _, writer := range l.writers { err := writer.Print(level, l.prefix, tb, m...) if err != nil { l.Error(err) } } } // Docker requires "\n" at end to write to log. // print not work for docker, otherwise it will work and write into stdout func (l *Logger) println(level LogLevel, m ...any) { if l.level.n < level.n { return } tb := getFullTraceback(0) for _, writer := range l.writers { err := writer.Print(level, l.prefix, tb, append(m, "\n")...) if err != nil { l.Error(err) } } }