mirror of
https://github.com/drakkan/sftpgo.git
synced 2025-12-07 06:40:54 +03:00
web hooks: improve resilience by adding a configurable retry
the retryable http client is used for hooks that notify events
This commit is contained in:
@@ -58,6 +58,56 @@ func (l *StdLoggerWrapper) Write(p []byte) (n int, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// LeveledLogger is a logger that accepts a message string and a variadic number of key-value pairs
|
||||
type LeveledLogger struct {
|
||||
Sender string
|
||||
}
|
||||
|
||||
func (l *LeveledLogger) addKeysAndValues(ev *zerolog.Event, keysAndValues ...interface{}) {
|
||||
for i := 0; i < len(keysAndValues); {
|
||||
if i == len(keysAndValues)-1 {
|
||||
break
|
||||
}
|
||||
key, val := keysAndValues[i], keysAndValues[i+1]
|
||||
if keyStr, ok := key.(string); ok {
|
||||
ev.Str(keyStr, fmt.Sprintf("%v", val))
|
||||
}
|
||||
i += 2
|
||||
}
|
||||
}
|
||||
|
||||
// Error logs at error level for the specified sender
|
||||
func (l *LeveledLogger) Error(msg string, keysAndValues ...interface{}) {
|
||||
ev := logger.Error()
|
||||
ev.Timestamp().Str("sender", l.Sender)
|
||||
l.addKeysAndValues(ev, keysAndValues...)
|
||||
ev.Send()
|
||||
}
|
||||
|
||||
// Info logs at info level for the specified sender
|
||||
func (l *LeveledLogger) Info(msg string, keysAndValues ...interface{}) {
|
||||
ev := logger.Info()
|
||||
ev.Timestamp().Str("sender", l.Sender)
|
||||
l.addKeysAndValues(ev, keysAndValues...)
|
||||
ev.Send()
|
||||
}
|
||||
|
||||
// Debug logs at debug level for the specified sender
|
||||
func (l *LeveledLogger) Debug(msg string, keysAndValues ...interface{}) {
|
||||
ev := logger.Debug()
|
||||
ev.Timestamp().Str("sender", l.Sender)
|
||||
l.addKeysAndValues(ev, keysAndValues...)
|
||||
ev.Send()
|
||||
}
|
||||
|
||||
// Warn logs at warn level for the specified sender
|
||||
func (l *LeveledLogger) Warn(msg string, keysAndValues ...interface{}) {
|
||||
ev := logger.Warn()
|
||||
ev.Timestamp().Str("sender", l.Sender)
|
||||
l.addKeysAndValues(ev, keysAndValues...)
|
||||
ev.Send()
|
||||
}
|
||||
|
||||
// GetLogger get the configured logger instance
|
||||
func GetLogger() *zerolog.Logger {
|
||||
return &logger
|
||||
|
||||
Reference in New Issue
Block a user