In my Go app I moved error logging into a separate function
package logging
import "github.com/rs/zerolog"
func LogError(logger zerolog.Logger, err error) {
logger.Error().Err(err).Msg("")
}
and want to create a small test to ensure the error log event was been raised. For reproduction purposes I won't show the test file but code from the playground https://go.dev/play/p/Jnyz51JemTh
package main
import (
"errors"
"fmt"
"github.com/rs/zerolog"
)
func main() {
logger := zerolog.Nop()
testError := errors.New("test error")
logHook := &logHook{}
logger.Hook(logHook)
LogError(logger, testError)
amountOfLogEvents := len(logHook.logEvents)
fmt.Printf("Expected amount of log events: 1\nActual amount of log events: %v", amountOfLogEvents)
// TODO inspect logHook.logEvents[0]
}
func LogError(logger zerolog.Logger, err error) {
logger.Error().Err(err).Msg("")
}
type logHook struct {
logEvents []zerolog.Event
}
func (logHook *logHook) Run(logEvent *zerolog.Event, level zerolog.Level, message string) {
logHook.logEvents = append(logHook.logEvents, *logEvent)
}
You should see the output
Expected amount of log events: 1
Actual amount of log events: 0
I thought I could create a custom hook to catch the event and inspect it. Unfortunately I'm struggling with two things
- Inspecting the error, message, ... from a single
zerolog.Event
didn't work for me. I couldn't find any fields or functions for this - The test fails because
amountOfLogEvents
is empty, although I would expect it to have one event
Do you know what's wrong and how to fix it?