diff --git a/cloudpickle/cloudpickle.py b/cloudpickle/cloudpickle.py index ea845b98b..384c1fc5f 100644 --- a/cloudpickle/cloudpickle.py +++ b/cloudpickle/cloudpickle.py @@ -819,6 +819,11 @@ def save_logger(self, obj): dispatch[logging.Logger] = save_logger + def save_root_logger(self, obj): + self.save_reduce(logging.getLogger, (), obj=obj) + + dispatch[logging.RootLogger] = save_root_logger + """Special functions for Add-on libraries""" def inject_addons(self): """Plug in system. Register additional pickling functions if modules already loaded""" diff --git a/tests/cloudpickle_test.py b/tests/cloudpickle_test.py index 445baa003..42679f841 100644 --- a/tests/cloudpickle_test.py +++ b/tests/cloudpickle_test.py @@ -588,8 +588,8 @@ def test_cell_manipulation(self): msg='cell contents not set correctly', ) - def test_logger(self): - logger = logging.getLogger('cloudpickle.dummy_test_logger') + def check_logger(self, name): + logger = logging.getLogger(name) pickled = pickle_depickle(logger) self.assertTrue(pickled is logger, (pickled, logger)) @@ -608,7 +608,13 @@ def test_logger(self): out, _ = proc.communicate() self.assertEqual(proc.wait(), 0) self.assertEqual(out.strip().decode(), - 'INFO:cloudpickle.dummy_test_logger:hello') + 'INFO:{}:hello'.format(logger.name)) + + def test_logger(self): + # logging.RootLogger object + self.check_logger(None) + # logging.Logger object + self.check_logger('cloudpickle.dummy_test_logger') def test_abc(self):