mirror of
https://github.com/rclone/rclone.git
synced 2025-12-06 00:03:32 +00:00
This removes logrus which is not developed any more and replaces it with the new log/slog from the Go standard library. It implements its own slog Handler which is backwards compatible with all of rclone's previous logging modes.
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
// Systemd interface for Unix variants only
|
|
|
|
//go:build unix
|
|
|
|
package log
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"log/slog"
|
|
"strconv"
|
|
|
|
"github.com/coreos/go-systemd/v22/journal"
|
|
"github.com/rclone/rclone/fs"
|
|
)
|
|
|
|
// Enables systemd logs if configured or if auto-detected
|
|
func startSystemdLog(handler *OutputHandler) bool {
|
|
handler.clearFormatFlags(logFormatDate | logFormatTime | logFormatMicroseconds | logFormatUTC | logFormatLongFile | logFormatShortFile | logFormatPid)
|
|
handler.setFormatFlags(logFormatNoLevel)
|
|
// TODO: Use the native journal.Print approach rather than a custom implementation
|
|
handler.SetOutput(func(level slog.Level, text string) {
|
|
text = fmt.Sprintf("<%s>%-6s: %s", systemdLogPrefix(level), level, text)
|
|
_ = log.Output(4, text)
|
|
})
|
|
return true
|
|
}
|
|
|
|
var slogLevelToSystemdPrefix = map[slog.Level]journal.Priority{
|
|
fs.SlogLevelEmergency: journal.PriEmerg,
|
|
fs.SlogLevelAlert: journal.PriAlert,
|
|
fs.SlogLevelCritical: journal.PriCrit,
|
|
slog.LevelError: journal.PriErr,
|
|
slog.LevelWarn: journal.PriWarning,
|
|
fs.SlogLevelNotice: journal.PriNotice,
|
|
slog.LevelInfo: journal.PriInfo,
|
|
slog.LevelDebug: journal.PriDebug,
|
|
}
|
|
|
|
func systemdLogPrefix(l slog.Level) string {
|
|
prio, ok := slogLevelToSystemdPrefix[l]
|
|
if !ok {
|
|
return ""
|
|
}
|
|
return strconv.Itoa(int(prio))
|
|
}
|
|
|
|
func isJournalStream() bool {
|
|
if usingJournald, _ := journal.StderrIsJournalStream(); usingJournald {
|
|
return true
|
|
}
|
|
return false
|
|
}
|