zerolog icon indicating copy to clipboard operation
zerolog copied to clipboard

How to set timezone when using ConsoleWriter?

Open chuan137 opened this issue 2 years ago • 2 comments

I tried to set the TimestampFunc, and it does change the json output, but not working on the console writer

	zerolog.TimestampFunc = func() time.Time {
		return time.Now().UTC()
	}

and here is my logs looks like, they are printed from same run with different logger. The timestamp jumps by 1hr because I am in the +1 timezone. The timestamp in json is correct UTC time, but the console writer logs the local time. How can I make it also log the UTC time?

{"level":"info","time":"2023-02-10T23:03:52Z","message":"config and template dir: ./"}
{"level":"info","time":"2023-02-10T23:03:52Z","message":"observe metrics from http://localhost:9090"}
2023-02-11T00:03:52+01:00 DBG pkg/netappsd/queue.go:67 > queue readiness = false

chuan137 avatar Feb 10 '23 23:02 chuan137

you can change /etc/localtime in the system directory.

luxinxinxin avatar Feb 16 '23 06:02 luxinxinxin

You can use a custom formatter for timestamps with ConsoleWriter.

cw := zerolog.NewConsoleWriter(func(w *zerolog.ConsoleWriter) {
	w.FormatTimestamp = func(i interface{}) string {
		if v, ok := i.(string); ok {
			if ts, err := time.ParseInLocation(time.RFC3339, v, time.Local); err == nil {
				return ts.UTC().Format(time.RFC3339)
			}
		}
		return "<nil>"
	}
})
log.Logger = log.Output(cw)

This was adapted from consoleDefaultFormatTimestamp in console.go. Link. Use that as a reference and make modifications wherever required. I have assumed that you're using ConsoleWriter only in development.

ramitmittal avatar Apr 27 '23 09:04 ramitmittal