github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/cmd/bisync/bilib/output.go (about)

     1  // Package bilib provides common stuff for bisync and bisync_test
     2  package bilib
     3  
     4  import (
     5  	"bytes"
     6  	"log"
     7  
     8  	"github.com/rclone/rclone/fs"
     9  	"github.com/sirupsen/logrus"
    10  )
    11  
    12  // CaptureOutput runs a function capturing its output.
    13  func CaptureOutput(fun func()) []byte {
    14  	logSave := log.Writer()
    15  	logrusSave := logrus.StandardLogger().Writer()
    16  	defer func() {
    17  		err := logrusSave.Close()
    18  		if err != nil {
    19  			fs.Errorf(nil, "error closing logrusSave: %v", err)
    20  		}
    21  	}()
    22  	buf := &bytes.Buffer{}
    23  	log.SetOutput(buf)
    24  	logrus.SetOutput(buf)
    25  	fun()
    26  	log.SetOutput(logSave)
    27  	logrus.SetOutput(logrusSave)
    28  	return buf.Bytes()
    29  }