          """ This should be called as the final task of each plugin
              aligns faces and puts to the out queue """
          if output == "EOF":
              self.queues["out"].put("EOF")
              return
          logger.trace("Item out: %s", {key: val
                                        for key, val in output.items()
                                        if key != "image"})
 
</s> remove             print("ERROR: {}".format(err))
 </s> add             logger.error(err)
            exit(1)
        logger.debug("Launching Align: (args: %s kwargs: %s)", args, kwargs)

    # <<< DETECTION WRAPPER >>> #
    def run(self, *args, **kwargs):
        """ Parent align process.
            This should always be called as the entry point so exceptions
            are passed back to parent.
            Do not override """
        try:
            self.align(*args, **kwargs)
        except Exception:  # pylint: disable=broad-except
            logger.error("Caught exception in child process: %s", os.getpid())
            tb_buffer = StringIO()
            traceback.print_exc(file=tb_buffer)
            exception = {"exception": (os.getpid(), tb_buffer)}
            self.queues["out"].put(exception) </s> remove             print("ERROR: {}".format(err))
 </s> add             logger.error(err)
            exit(1)
        logger.debug("Detecting Faces (args: %s, kwargs: %s)", args, kwargs)

    # <<< DETECTION WRAPPER >>> #
    def run(self, *args, **kwargs):
        """ Parent detect process.
            This should always be called as the entry point so exceptions
            are passed back to parent.
            Do not override """
        try:
            self.detect_faces(*args, **kwargs)
        except Exception:  # pylint: disable=broad-except
            logger.error("Caught exception in child process: %s", os.getpid())
            tb_buffer = StringIO()
            traceback.print_exc(file=tb_buffer)
            exception = {"exception": (os.getpid(), tb_buffer)}
            self.queues["out"].put(exception)
            logger.trace("Item out: %s", output)
          """ This should be called as the final task of each plugin
              aligns faces and puts to the out queue """
          if output == "EOF":
            logger.trace("Item out: %s", output)
              self.queues["out"].put("EOF")
              return
          logger.trace("Item out: %s", {key: val
                                        for key, val in output.items()
                                        if key != "image"})
keep keep add keep keep keep keep keep
 Logging (#541)

* Convert prints to logger. Further logging improvements. Tidy  up

* Fix system verbosity. Allow SystemExit

* Fix reload extract bug

* Child Traceback handling

* Safer shutdown procedure

* Add shutdown event to queue manager

* landmarks_as_xy > property. GUI notes + linting. Aligner bugfix

* fix FaceFilter. Enable nFilter when no Filter is supplied

* Fix blurry face filter

* Continue on IO error. Better error handling

* Explicitly print stack trace tocrash log

* Windows Multiprocessing bugfix

* Add git info and conda version to crash log

* Windows/Anaconda mp bugfix

* Logging fixes for training 
plugins/extract/align/_base.py