func NewProduction(options ...zap.Option) (*zap.Logger, error) {
	return zap.NewProduction(append(options, Core())...)
}
NewProduction gives you a `zap.NewProduction` configuration with the ability to emit a cannonical logline
at the end of the request
package cannon
import (
	"errors"
	"time"
	"github.com/BTBurke/cannon/internal"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)
func Core() zap.Option {
	return zap.WrapCore(func(c zapcore.Core) zapcore.Core {
		core := &internal.CannonicalLog{
			EmptyCore:   c,
			WrappedCore: c,
		}
		return core
	})
}
func Emit(log *zap.Logger, fields ...zap.Field) error {
	c, ok := log.Core().(*internal.CannonicalLog)
	if !ok {
		return errors.New("unknown logger type")
	}
	if len(c.Fields)+len(fields) == 0 {
		return nil
	}
	if err := c.EmptyCore.Write(zapcore.Entry{
		Time:    time.Now(),
		Message: "cannonical_log_line",
	}, append(c.Fields, fields...)); err != nil {
		return err
	}
	if err := c.EmptyCore.Sync(); err != nil {
		return err
	}
	return nil
}
func NewDevelopment(options ...zap.Option) (*zap.Logger, error) {
	return zap.NewDevelopment(append(options, Core())...)
}