summary refs log tree commit diff
diff options
context:
space:
mode:
authorRichard van der Hoff <richard@matrix.org>2017-03-09 22:54:52 +0000
committerRichard van der Hoff <richard@matrix.org>2017-03-10 15:29:55 +0000
commit9072a8c6279812e50ad1d3129efc564ce531acbb (patch)
tree69e4f4ff52974fb4f36bc0ad0c738a18b6d09a25
parentFix docstring (diff)
downloadsynapse-9072a8c6279812e50ad1d3129efc564ce531acbb.tar.xz
Reread log config on SIGHUP
When we are using a log_config file, reread it on SIGHUP.
Diffstat (limited to '')
-rw-r--r--synapse/config/logger.py29
1 files changed, 19 insertions, 10 deletions
diff --git a/synapse/config/logger.py b/synapse/config/logger.py
index 77ded0ad25..e1f060d404 100644
--- a/synapse/config/logger.py
+++ b/synapse/config/logger.py
@@ -153,14 +153,6 @@ def setup_logging(log_config=None, log_file=None, verbosity=None):
                 logger.info("Closing log file due to SIGHUP")
                 handler.doRollover()
                 logger.info("Opened new log file due to SIGHUP")
-
-            # TODO(paul): obviously this is a terrible mechanism for
-            #   stealing SIGHUP, because it means no other part of synapse
-            #   can use it instead. If we want to catch SIGHUP anywhere
-            #   else as well, I'd suggest we find a nicer way to broadcast
-            #   it around.
-            if getattr(signal, "SIGHUP"):
-                signal.signal(signal.SIGHUP, sighup)
         else:
             handler = logging.StreamHandler()
         handler.setFormatter(formatter)
@@ -169,8 +161,25 @@ def setup_logging(log_config=None, log_file=None, verbosity=None):
 
         logger.addHandler(handler)
     else:
-        with open(log_config, 'r') as f:
-            logging.config.dictConfig(yaml.load(f))
+        def load_log_config():
+            with open(log_config, 'r') as f:
+                logging.config.dictConfig(yaml.load(f))
+
+        def sighup(signum, stack):
+            # it might be better to use a file watcher or something for this.
+            logging.info("Reloading log config from %s due to SIGHUP",
+                         log_config)
+            load_log_config()
+
+        load_log_config()
+
+    # TODO(paul): obviously this is a terrible mechanism for
+    #   stealing SIGHUP, because it means no other part of synapse
+    #   can use it instead. If we want to catch SIGHUP anywhere
+    #   else as well, I'd suggest we find a nicer way to broadcast
+    #   it around.
+    if getattr(signal, "SIGHUP"):
+        signal.signal(signal.SIGHUP, sighup)
 
     # It's critical to point twisted's internal logging somewhere, otherwise it
     # stacks up and leaks kup to 64K object;