func NewStructuredLogger()

in internal/log/log.go [81:114]


func NewStructuredLogger(quiet bool) (alloydb.Logger, func() error) {
	// Configure structured logs to adhere to LogEntry format
	// https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry
	c := zap.NewProductionEncoderConfig()
	c.LevelKey = "severity"
	c.MessageKey = "message"
	c.TimeKey = "timestamp"
	c.EncodeLevel = zapcore.CapitalLevelEncoder
	c.EncodeTime = zapcore.ISO8601TimeEncoder

	enc := zapcore.NewJSONEncoder(c)

	var syncer zapcore.WriteSyncer
	// quiet disables writing to the info log
	if quiet {
		syncer = zapcore.AddSync(io.Discard)
	} else {
		syncer = zapcore.Lock(os.Stdout)
	}
	core := zapcore.NewTee(
		zapcore.NewCore(enc, syncer, zap.LevelEnablerFunc(func(l zapcore.Level) bool {
			// Anything below error, goes to the info log.
			return l < zapcore.ErrorLevel
		})),
		zapcore.NewCore(enc, zapcore.Lock(os.Stderr), zap.LevelEnablerFunc(func(l zapcore.Level) bool {
			// Anything at error or higher goes to the error log.
			return l >= zapcore.ErrorLevel
		})),
	)
	l := &StructuredLogger{
		logger: zap.New(core).Sugar(),
	}
	return l, l.logger.Sync
}