Skip to content

Instantly share code, notes, and snippets.

@iwuvjhdva
Created October 26, 2017 13:21
Show Gist options
  • Save iwuvjhdva/b0be6405dfd40cdf19467c6100bdf7c8 to your computer and use it in GitHub Desktop.
Save iwuvjhdva/b0be6405dfd40cdf19467c6100bdf7c8 to your computer and use it in GitHub Desktop.
Capture Golang Zap logger output for unit tests
import (
"bufio"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
/*
Global Logger variable is a Zap logger.
USAGE:
output := captureOutput(func() {
Logger.Info("Stuff")
})
// output contains the log entry
*/
func captureOutput(funcToRun func()) string {
var buffer bytes.Buffer
oldLogger := Logger
encoder := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())
writer := bufio.NewWriter(&buffer)
Logger = zap.New(
zapcore.NewCore(encoder, zapcore.AddSync(writer), zapcore.DebugLevel)).
Sugar()
funcToRun()
writer.Flush()
Logger = oldLogger
return buffer.String()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment