bisync: fix output capture restoring the wrong output for logrus

Before this change, if rclone is used as a library and logrus is used
after a call to rc `sync/bisync`, logging does not work anymore and
leads to writing to a closed pipe.

This change restores the output correctly.

Fixes #8158
This commit is contained in:
Dimitrios Slamaris 2024-11-12 12:42:54 +01:00 committed by GitHub
parent 173b2ac956
commit abe884e744
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -5,20 +5,13 @@ import (
"bytes" "bytes"
"log" "log"
"github.com/rclone/rclone/fs"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
// CaptureOutput runs a function capturing its output. // CaptureOutput runs a function capturing its output.
func CaptureOutput(fun func()) []byte { func CaptureOutput(fun func()) []byte {
logSave := log.Writer() logSave := log.Writer()
logrusSave := logrus.StandardLogger().Writer() logrusSave := logrus.StandardLogger().Out
defer func() {
err := logrusSave.Close()
if err != nil {
fs.Errorf(nil, "error closing logrusSave: %v", err)
}
}()
buf := &bytes.Buffer{} buf := &bytes.Buffer{}
log.SetOutput(buf) log.SetOutput(buf)
logrus.SetOutput(buf) logrus.SetOutput(buf)