diff --git a/synapse/app/appservice.py b/synapse/app/appservice.py
index 190093005342be95833fd19d687e009225f0c7f1..83ee3e3ce3d3789015d101d3263e14c19e89ae6d 100644
--- a/synapse/app/appservice.py
+++ b/synapse/app/appservice.py
@@ -157,7 +157,7 @@ def start(config_options):
 
     assert config.worker_app == "synapse.app.appservice"
 
-    setup_logging(config.worker_log_config, config.worker_log_file)
+    setup_logging(config, use_worker_options=True)
 
     events.USE_FROZEN_DICTS = config.use_frozen_dicts
 
diff --git a/synapse/app/client_reader.py b/synapse/app/client_reader.py
index 4d081eccd11b6eb23a4632d38e2e6648ad5e3c32..7ed0de411718dbe81fcf416447490a2605d145db 100644
--- a/synapse/app/client_reader.py
+++ b/synapse/app/client_reader.py
@@ -171,7 +171,7 @@ def start(config_options):
 
     assert config.worker_app == "synapse.app.client_reader"
 
-    setup_logging(config.worker_log_config, config.worker_log_file)
+    setup_logging(config, use_worker_options=True)
 
     events.USE_FROZEN_DICTS = config.use_frozen_dicts
 
diff --git a/synapse/app/federation_reader.py b/synapse/app/federation_reader.py
index 90a48167538db83b8cadebb6f6c8189cb5ee9026..ca742de6b236d0d8953871d4b1a5d671f3f1ee4e 100644
--- a/synapse/app/federation_reader.py
+++ b/synapse/app/federation_reader.py
@@ -162,7 +162,7 @@ def start(config_options):
 
     assert config.worker_app == "synapse.app.federation_reader"
 
-    setup_logging(config.worker_log_config, config.worker_log_file)
+    setup_logging(config, use_worker_options=True)
 
     events.USE_FROZEN_DICTS = config.use_frozen_dicts
 
diff --git a/synapse/app/federation_sender.py b/synapse/app/federation_sender.py
index 411e47d98dedbe1c6168b3338e2c2fab05b97dd0..0cf5b196e670c425835cf950584520f1a7e1ab56 100644
--- a/synapse/app/federation_sender.py
+++ b/synapse/app/federation_sender.py
@@ -160,7 +160,7 @@ def start(config_options):
 
     assert config.worker_app == "synapse.app.federation_sender"
 
-    setup_logging(config.worker_log_config, config.worker_log_file)
+    setup_logging(config, use_worker_options=True)
 
     events.USE_FROZEN_DICTS = config.use_frozen_dicts
 
diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py
index e0b87468fec616aacfb5608e85ee42153c6056f2..0b9d78c13cc59cede140e5d5fdd07f1217f8ccd0 100755
--- a/synapse/app/homeserver.py
+++ b/synapse/app/homeserver.py
@@ -20,6 +20,8 @@ import gc
 import logging
 import os
 import sys
+
+import synapse.config.logger
 from synapse.config._base import ConfigError
 
 from synapse.python_dependencies import (
@@ -286,7 +288,7 @@ def setup(config_options):
         # generating config files and shouldn't try to continue.
         sys.exit(0)
 
-    config.setup_logging()
+    synapse.config.logger.setup_logging(config, use_worker_options=False)
 
     # check any extra requirements we have now we have a config
     check_requirements(config)
diff --git a/synapse/app/media_repository.py b/synapse/app/media_repository.py
index ef17b158a5bdcabd0bc2e66b6f3ebe26b96d2162..c5579d9e38ba44d63991f58fd865f13fec7e8f05 100644
--- a/synapse/app/media_repository.py
+++ b/synapse/app/media_repository.py
@@ -168,7 +168,7 @@ def start(config_options):
 
     assert config.worker_app == "synapse.app.media_repository"
 
-    setup_logging(config.worker_log_config, config.worker_log_file)
+    setup_logging(config, use_worker_options=True)
 
     events.USE_FROZEN_DICTS = config.use_frozen_dicts
 
diff --git a/synapse/app/pusher.py b/synapse/app/pusher.py
index 073f2c248900b08a96e4c58655c5142634c1b9f8..b025db54d41b78deef83b9a44ae97629de68ba6e 100644
--- a/synapse/app/pusher.py
+++ b/synapse/app/pusher.py
@@ -245,7 +245,7 @@ def start(config_options):
 
     assert config.worker_app == "synapse.app.pusher"
 
-    setup_logging(config.worker_log_config, config.worker_log_file)
+    setup_logging(config, use_worker_options=True)
 
     events.USE_FROZEN_DICTS = config.use_frozen_dicts
 
diff --git a/synapse/app/synchrotron.py b/synapse/app/synchrotron.py
index 3f29595256104d308860c26a2f9a1780fb493401..29f075aa5f30250a91c6883c1ee26597c266b0cc 100644
--- a/synapse/app/synchrotron.py
+++ b/synapse/app/synchrotron.py
@@ -478,7 +478,7 @@ def start(config_options):
 
     assert config.worker_app == "synapse.app.synchrotron"
 
-    setup_logging(config.worker_log_config, config.worker_log_file)
+    setup_logging(config, use_worker_options=True)
 
     synapse.events.USE_FROZEN_DICTS = config.use_frozen_dicts
 
diff --git a/synapse/config/logger.py b/synapse/config/logger.py
index 77ded0ad25a0ea066ad4396ec2acb4f1e8193b8b..c76fddf1183abf3c38b8e27344a53f67ac57dac1 100644
--- a/synapse/config/logger.py
+++ b/synapse/config/logger.py
@@ -118,11 +118,22 @@ class LoggingConfig(Config):
                     DEFAULT_LOG_CONFIG.substitute(log_file=config["log_file"])
                 )
 
-    def setup_logging(self):
-        setup_logging(self.log_config, self.log_file, self.verbosity)
 
+def setup_logging(config, use_worker_options=False):
+    """ Set up python logging
+
+    Args:
+        config (LoggingConfig | synapse.config.workers.WorkerConfig):
+            configuration data
+
+        use_worker_options (bool): True to use 'worker_log_config' and
+            'worker_log_file' options instead of 'log_config' and 'log_file'.
+    """
+    log_config = (config.worker_log_config if use_worker_options
+                  else config.log_config)
+    log_file = (config.worker_log_file if use_worker_options
+                else config.log_file)
 
-def setup_logging(log_config=None, log_file=None, verbosity=None):
     log_format = (
         "%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s"
         " - %(message)s"
@@ -131,9 +142,9 @@ def setup_logging(log_config=None, log_file=None, verbosity=None):
 
         level = logging.INFO
         level_for_storage = logging.INFO
-        if verbosity:
+        if config.verbosity:
             level = logging.DEBUG
-            if verbosity > 1:
+            if config.verbosity > 1:
                 level_for_storage = logging.DEBUG
 
         # FIXME: we need a logging.WARN for a -q quiet option