code: func (s *Logging) ZapLogger(name string) *zap.Logger {
  	if !isValidLoggerName(name) {
  		panic(fmt.Sprintf("invalid logger name: %s", name))
  	}
  
  	// always return true here because the core's Check()
  	// method computes the level for the logger name based
  	// on the active logging spec
  	levelEnabler := zap.LevelEnablerFunc(func(l zapcore.Level) bool { return true })
  
  	s.mutex.RLock()
  	core := &Core{
  		LevelEnabler: levelEnabler,
  		Levels:       s.LoggerLevels,
  		Encoders: map[Encoding]zapcore.Encoder{
  			JSON:    zapcore.NewJSONEncoder(s.encoderConfig),
  			CONSOLE: fabenc.NewFormatEncoder(s.multiFormatter),
  			LOGFMT:  zaplogfmt.NewEncoder(s.encoderConfig),
  		},
  		Selector: s,
  		Output:   s,
  		Observer: s,
  	}
  	s.mutex.RUnlock()
  
  	return NewZapLogger(core).Named(name)
  }
docs: // ZapLogger instantiates a new zap.Logger with the specified name. The name is
  // used to determine which log levels are enabled.