zapdriver
                                
                                 zapdriver copied to clipboard
                                
                                    zapdriver copied to clipboard
                            
                            
                            
                        Duplicate output
The following demo program prints two matching log entries:
package main
import (
	"os"
	"github.com/blendle/zapdriver"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)
func main() {
	consoleEncoder := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())
	core := zapcore.NewTee(
		zapcore.NewCore(consoleEncoder, os.Stderr, zapcore.ErrorLevel),
		zapcore.NewCore(consoleEncoder, os.Stdout, zapcore.InfoLevel),
	)
	logger := zap.New(core, zap.AddCaller())
	logger = logger.WithOptions(zapdriver.WrapCore())
	defer logger.Sync()
	logger.Info("Starting...")
}
I am actually not sure this can be fixed or simply this is a limitation of Zap, but it seems to me that Check simply cannot work properly in this case without calling Check on the underlying core. Will investigate the issue further...
In other words, using return c.Core.Check(ent, ce) in Check fixes the issue, but that is not what you want, you want to register the wrapping core, right?
What obviously works is to add
func Wrap(c zapcore.Core) zapcore.Core {
	return &core{c, newLabels(), newLabels()}
}
and do
core := zapcore.NewTee(
	zapdriver.Wrap(zapcore.NewCore(consoleEncoder, os.Stderr, zapcore.ErrorLevel)),
	zapdriver.Wrap(zapcore.NewCore(consoleEncoder, os.Stdout, zapcore.InfoLevel)),
)
Ok, can be done already
core := zapcore.NewTee(
	zap.New(zapcore.NewCore(consoleEncoder, os.Stderr, zapcore.ErrorLevel)).
                WithOptions(zapdriver.WrapCore()).Core(),
	zap.New(zapcore.NewCore(consoleEncoder, os.Stdout, zapcore.InfoLevel)).
                WithOptions(zapdriver.WrapCore()).Core(),
)
Still wondering whether the library can be fixed so that the original code works. Not sure...