def log(self, logger=None, label=None, eager=False):
        '''
        Log query result consumption details to a logger.

        Args:
            logger: Any object which supports a debug() method which accepts a
                str, such as a Python standard library logger object from the
                logging module.  If logger is not provided or is None, this
                method has no logging side effects.

            label: An optional label which will be inserted into each line of
                logging output produced by this particular use of log

            eager: An optional boolean which controls how the query result will
                be consumed.  If True, the sequence will be consumed and logged
                in its entirety. If False (the default) the sequence will be
                evaluated and logged lazily as it consumed.

        Warning: Use of eager=True requires use of sufficient memory to
            hold the entire sequence which is obviously not possible with
            infinite sequences.  Use with care!

        Returns:
            A queryable over the unaltered source sequence.

        Raises:
            AttributeError: If logger does not support a debug() method.
            ValueError: If the Queryable has been closed.
        '''
        if self.closed():
            raise ValueError("Attempt to call log() on a closed Queryable.")

        if logger is None:
            return self

        if label is None:
            label = repr(self)

        if eager:
            return self._create(self._eager_log_result(logger, label))

        return self._create(self._generate_lazy_log_result(logger, label))
Log query result consumption details to a logger.

        Args:
            logger: Any object which supports a debug() method which accepts a
                str, such as a Python standard library logger object from the
                logging module.  If logger is not provided or is None, this
                method has no logging side effects.

            label: An optional label which will be inserted into each line of
                logging output produced by this particular use of log

            eager: An optional boolean which controls how the query result will
                be consumed.  If True, the sequence will be consumed and logged
                in its entirety. If False (the default) the sequence will be
                evaluated and logged lazily as it consumed.

        Warning: Use of eager=True requires use of sufficient memory to
            hold the entire sequence which is obviously not possible with
            infinite sequences.  Use with care!

        Returns:
            A queryable over the unaltered source sequence.

        Raises:
            AttributeError: If logger does not support a debug() method.
            ValueError: If the Queryable has been closed.