fs: add non-format variants of log functions to avoid non-constant format string warnings
This commit is contained in:
parent
752809309d
commit
33d6c3f92f
1 changed files with 124 additions and 32 deletions
140
fs/log.go
140
fs/log.go
|
@ -108,42 +108,82 @@ func (j LogValueItem) String() string {
|
||||||
return fmt.Sprint(j.value)
|
return fmt.Sprint(j.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// LogPrintf produces a log string from the arguments passed in
|
func logLogrus(level LogLevel, text string, fields logrus.Fields) {
|
||||||
func LogPrintf(level LogLevel, o interface{}, text string, args ...interface{}) {
|
switch level {
|
||||||
out := fmt.Sprintf(text, args...)
|
case LogLevelDebug:
|
||||||
|
logrus.WithFields(fields).Debug(text)
|
||||||
|
case LogLevelInfo:
|
||||||
|
logrus.WithFields(fields).Info(text)
|
||||||
|
case LogLevelNotice, LogLevelWarning:
|
||||||
|
logrus.WithFields(fields).Warn(text)
|
||||||
|
case LogLevelError:
|
||||||
|
logrus.WithFields(fields).Error(text)
|
||||||
|
case LogLevelCritical:
|
||||||
|
logrus.WithFields(fields).Fatal(text)
|
||||||
|
case LogLevelEmergency, LogLevelAlert:
|
||||||
|
logrus.WithFields(fields).Panic(text)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if GetConfig(context.TODO()).UseJSONLog {
|
func logLogrusWithObject(level LogLevel, o interface{}, text string, fields logrus.Fields) {
|
||||||
fields := logrus.Fields{}
|
|
||||||
if o != nil {
|
if o != nil {
|
||||||
fields = logrus.Fields{
|
if fields == nil {
|
||||||
"object": fmt.Sprintf("%+v", o),
|
fields = logrus.Fields{}
|
||||||
"objectType": fmt.Sprintf("%T", o),
|
|
||||||
}
|
}
|
||||||
|
fields["object"] = fmt.Sprintf("%+v", o)
|
||||||
|
fields["objectType"] = fmt.Sprintf("%T", o)
|
||||||
}
|
}
|
||||||
|
logLogrus(level, text, fields)
|
||||||
|
}
|
||||||
|
|
||||||
|
func logJSON(level LogLevel, o interface{}, text string) {
|
||||||
|
logLogrusWithObject(level, o, text, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func logJSONf(level LogLevel, o interface{}, text string, args ...interface{}) {
|
||||||
|
text = fmt.Sprintf(text, args...)
|
||||||
|
fields := logrus.Fields{}
|
||||||
for _, arg := range args {
|
for _, arg := range args {
|
||||||
if item, ok := arg.(LogValueItem); ok {
|
if item, ok := arg.(LogValueItem); ok {
|
||||||
fields[item.key] = item.value
|
fields[item.key] = item.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch level {
|
logLogrusWithObject(level, o, text, fields)
|
||||||
case LogLevelDebug:
|
|
||||||
logrus.WithFields(fields).Debug(out)
|
|
||||||
case LogLevelInfo:
|
|
||||||
logrus.WithFields(fields).Info(out)
|
|
||||||
case LogLevelNotice, LogLevelWarning:
|
|
||||||
logrus.WithFields(fields).Warn(out)
|
|
||||||
case LogLevelError:
|
|
||||||
logrus.WithFields(fields).Error(out)
|
|
||||||
case LogLevelCritical:
|
|
||||||
logrus.WithFields(fields).Fatal(out)
|
|
||||||
case LogLevelEmergency, LogLevelAlert:
|
|
||||||
logrus.WithFields(fields).Panic(out)
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
|
func logPlain(level LogLevel, o interface{}, text string) {
|
||||||
if o != nil {
|
if o != nil {
|
||||||
out = fmt.Sprintf("%v: %s", o, out)
|
text = fmt.Sprintf("%v: %s", o, text)
|
||||||
}
|
}
|
||||||
LogOutput(level, out)
|
LogOutput(level, text)
|
||||||
|
}
|
||||||
|
|
||||||
|
func logPlainf(level LogLevel, o interface{}, text string, args ...interface{}) {
|
||||||
|
logPlain(level, o, fmt.Sprintf(text, args...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LogPrint produces a log string from the arguments passed in
|
||||||
|
func LogPrint(level LogLevel, o interface{}, text string) {
|
||||||
|
if GetConfig(context.TODO()).UseJSONLog {
|
||||||
|
logJSON(level, o, text)
|
||||||
|
} else {
|
||||||
|
logPlain(level, o, text)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// LogPrintf produces a log string from the arguments passed in
|
||||||
|
func LogPrintf(level LogLevel, o interface{}, text string, args ...interface{}) {
|
||||||
|
if GetConfig(context.TODO()).UseJSONLog {
|
||||||
|
logJSONf(level, o, text, args...)
|
||||||
|
} else {
|
||||||
|
logPlainf(level, o, text, args...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// LogLevelPrint writes logs at the given level
|
||||||
|
func LogLevelPrint(level LogLevel, o interface{}, text string) {
|
||||||
|
if GetConfig(context.TODO()).LogLevel >= level {
|
||||||
|
LogPrint(level, o, text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,6 +194,15 @@ func LogLevelPrintf(level LogLevel, o interface{}, text string, args ...interfac
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Panic writes alert log output for this Object or Fs and calls panic().
|
||||||
|
// It should always be seen by the user.
|
||||||
|
func Panic(o interface{}, text string) {
|
||||||
|
if GetConfig(context.TODO()).LogLevel >= LogLevelAlert {
|
||||||
|
LogPrint(LogLevelAlert, o, text)
|
||||||
|
}
|
||||||
|
panic(text)
|
||||||
|
}
|
||||||
|
|
||||||
// Panicf writes alert log output for this Object or Fs and calls panic().
|
// Panicf writes alert log output for this Object or Fs and calls panic().
|
||||||
// It should always be seen by the user.
|
// It should always be seen by the user.
|
||||||
func Panicf(o interface{}, text string, args ...interface{}) {
|
func Panicf(o interface{}, text string, args ...interface{}) {
|
||||||
|
@ -163,6 +212,15 @@ func Panicf(o interface{}, text string, args ...interface{}) {
|
||||||
panic(fmt.Sprintf(text, args...))
|
panic(fmt.Sprintf(text, args...))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fatal writes critical log output for this Object or Fs and calls os.Exit(1).
|
||||||
|
// It should always be seen by the user.
|
||||||
|
func Fatal(o interface{}, text string) {
|
||||||
|
if GetConfig(context.TODO()).LogLevel >= LogLevelCritical {
|
||||||
|
LogPrint(LogLevelCritical, o, text)
|
||||||
|
}
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
// Fatalf writes critical log output for this Object or Fs and calls os.Exit(1).
|
// Fatalf writes critical log output for this Object or Fs and calls os.Exit(1).
|
||||||
// It should always be seen by the user.
|
// It should always be seen by the user.
|
||||||
func Fatalf(o interface{}, text string, args ...interface{}) {
|
func Fatalf(o interface{}, text string, args ...interface{}) {
|
||||||
|
@ -172,17 +230,37 @@ func Fatalf(o interface{}, text string, args ...interface{}) {
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Error writes error log output for this Object or Fs. It
|
||||||
|
// should always be seen by the user.
|
||||||
|
func Error(o interface{}, text string) {
|
||||||
|
LogLevelPrint(LogLevelError, o, text)
|
||||||
|
}
|
||||||
|
|
||||||
// Errorf writes error log output for this Object or Fs. It
|
// Errorf writes error log output for this Object or Fs. It
|
||||||
// should always be seen by the user.
|
// should always be seen by the user.
|
||||||
func Errorf(o interface{}, text string, args ...interface{}) {
|
func Errorf(o interface{}, text string, args ...interface{}) {
|
||||||
LogLevelPrintf(LogLevelError, o, text, args...)
|
LogLevelPrintf(LogLevelError, o, text, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Print writes log output for this Object or Fs, same as Logf.
|
||||||
|
func Print(o interface{}, text string) {
|
||||||
|
LogLevelPrint(LogLevelNotice, o, text)
|
||||||
|
}
|
||||||
|
|
||||||
// Printf writes log output for this Object or Fs, same as Logf.
|
// Printf writes log output for this Object or Fs, same as Logf.
|
||||||
func Printf(o interface{}, text string, args ...interface{}) {
|
func Printf(o interface{}, text string, args ...interface{}) {
|
||||||
LogLevelPrintf(LogLevelNotice, o, text, args...)
|
LogLevelPrintf(LogLevelNotice, o, text, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Log writes log output for this Object or Fs. This should be
|
||||||
|
// considered to be Notice level logging. It is the default level.
|
||||||
|
// By default rclone should not log very much so only use this for
|
||||||
|
// important things the user should see. The user can filter these
|
||||||
|
// out with the -q flag.
|
||||||
|
func Log(o interface{}, text string) {
|
||||||
|
LogLevelPrint(LogLevelNotice, o, text)
|
||||||
|
}
|
||||||
|
|
||||||
// Logf writes log output for this Object or Fs. This should be
|
// Logf writes log output for this Object or Fs. This should be
|
||||||
// considered to be Notice level logging. It is the default level.
|
// considered to be Notice level logging. It is the default level.
|
||||||
// By default rclone should not log very much so only use this for
|
// By default rclone should not log very much so only use this for
|
||||||
|
@ -192,6 +270,14 @@ func Logf(o interface{}, text string, args ...interface{}) {
|
||||||
LogLevelPrintf(LogLevelNotice, o, text, args...)
|
LogLevelPrintf(LogLevelNotice, o, text, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Infoc writes info on transfers for this Object or Fs. Use this
|
||||||
|
// level for logging transfers, deletions and things which should
|
||||||
|
// appear with the -v flag.
|
||||||
|
// There is name class on "Info", hence the name "Infoc", "c" for constant.
|
||||||
|
func Infoc(o interface{}, text string) {
|
||||||
|
LogLevelPrint(LogLevelInfo, o, text)
|
||||||
|
}
|
||||||
|
|
||||||
// Infof writes info on transfers for this Object or Fs. Use this
|
// Infof writes info on transfers for this Object or Fs. Use this
|
||||||
// level for logging transfers, deletions and things which should
|
// level for logging transfers, deletions and things which should
|
||||||
// appear with the -v flag.
|
// appear with the -v flag.
|
||||||
|
@ -199,6 +285,12 @@ func Infof(o interface{}, text string, args ...interface{}) {
|
||||||
LogLevelPrintf(LogLevelInfo, o, text, args...)
|
LogLevelPrintf(LogLevelInfo, o, text, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Debug writes debugging output for this Object or Fs. Use this for
|
||||||
|
// debug only. The user must have to specify -vv to see this.
|
||||||
|
func Debug(o interface{}, text string) {
|
||||||
|
LogLevelPrint(LogLevelDebug, o, text)
|
||||||
|
}
|
||||||
|
|
||||||
// Debugf writes debugging output for this Object or Fs. Use this for
|
// Debugf writes debugging output for this Object or Fs. Use this for
|
||||||
// debug only. The user must have to specify -vv to see this.
|
// debug only. The user must have to specify -vv to see this.
|
||||||
func Debugf(o interface{}, text string, args ...interface{}) {
|
func Debugf(o interface{}, text string, args ...interface{}) {
|
||||||
|
|
Loading…
Reference in a new issue