diff --git a/logs.go b/logs.go index a3b0c63..1329e5a 100644 --- a/logs.go +++ b/logs.go @@ -1,31 +1,47 @@ package main import ( + "bytes" "os" "github.com/rs/zerolog" ) -// logOut implements zerolog.LevelWriter -type logOut struct{} - -// Write should not be called -func (l logOut) Write(p []byte) (n int, err error) { - return os.Stdout.Write(p) -} - const timeFormat = "2006-01-02 15:04:05" var ( standardOut = zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: timeFormat} errorOut = zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: timeFormat} + buffer = new(bytes.Buffer) + bufferOut = zerolog.ConsoleWriter{Out: buffer, TimeFormat: timeFormat} ) +// logSplitter implements zerolog.LevelWriter +type logSplitter struct{} + +// Write should not be called +func (l logSplitter) Write(p []byte) (n int, err error) { + return os.Stdout.Write(p) +} + // WriteLevel write to the appropriate output -func (l logOut) WriteLevel(level zerolog.Level, p []byte) (n int, err error) { +func (l logSplitter) WriteLevel(level zerolog.Level, p []byte) (n int, err error) { if level <= zerolog.WarnLevel { return standardOut.Write(p) } else { return errorOut.Write(p) } } + +// JsonColorizerHook implements zerolog.Hook +// This hook is used to reformat the output of the JSON 'message' field to be like ConsoleWriter, but embedded within JSON +type JsonColorizerHook struct{} + +func (h JsonColorizerHook) Run(e *zerolog.Event, level zerolog.Level, msg string) { + buffer.Reset() + bufferOut.Write([]byte(msg)) + formattedMessage := buffer.String() + + e.Str("text", msg) // Add the original message to the event + e.Str("message", formattedMessage) +} diff --git a/main.go b/main.go index a961167..4183a11 100644 --- a/main.go +++ b/main.go @@ -39,9 +39,11 @@ func init() { // Use the custom console writer if we're in development isDevelopment = environment == "development" - if isDevelopment { - log.Logger = zerolog.New(logOut{}).With().Timestamp().Logger() - } + // if isDevelopment { + // log.Logger = zerolog.New(logSplitter{}).With().Timestamp().Logger() + // } + hooked := log.Hook(JsonColorizerHook{}) + log.Logger = zerolog.New(hooked).With().Timestamp().Logger() log.Debug().Str("environment", environment).Msg("Environment Loaded") // Set discordgo's logger to use zerolog