From 5f926650743bcb0798f3f53bc40cf3c3806a6780 Mon Sep 17 00:00:00 2001 From: David D Date: Tue, 30 Apr 2019 20:55:58 -0400 Subject: [PATCH] for log rotation with logrotate.d called by kill -USR1 PID --- daphne/access.py | 4 ++++ daphne/cli.py | 15 +++++++++++++++ daphne/server.py | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/daphne/access.py b/daphne/access.py index 2b3b1cd..8d5bf24 100644 --- a/daphne/access.py +++ b/daphne/access.py @@ -68,3 +68,7 @@ class AccessLogGenerator(object): length or "-", ) ) + + def close_stream(self): + self.stream.flush() + self.stream.close() \ No newline at end of file diff --git a/daphne/cli.py b/daphne/cli.py index 2e65b12..118ca58 100755 --- a/daphne/cli.py +++ b/daphne/cli.py @@ -11,6 +11,9 @@ from .endpoints import build_endpoint_description_strings from .server import Server from .utils import import_by_path +import signal + + logger = logging.getLogger(__name__) DEFAULT_HOST = "127.0.0.1" @@ -40,6 +43,8 @@ class CommandLineInterface(object): server_class = Server def __init__(self): + self.access_log = None + self.parser = argparse.ArgumentParser(description=self.description) self.parser.add_argument( "-p", "--port", type=int, help="Port number to listen on", default=None @@ -183,6 +188,14 @@ class CommandLineInterface(object): self.server = None + + # For logrotate at SIGNALUSR1 + def logrotate(self, signum, stack): + if self.access_log is not None: + access_log_stream = open(self.access_log, "a", 1) + self.server.rotate_log_action(AccessLogGenerator(access_log_stream)) + + @classmethod def entrypoint(cls): """ @@ -244,7 +257,9 @@ class CommandLineInterface(object): if args.access_log == "-": access_log_stream = sys.stdout else: + self.access_log = args.access_log access_log_stream = open(args.access_log, "a", 1) + signal.signal(signal.SIGUSR1, self.logrotate) elif args.verbosity >= 1: access_log_stream = sys.stdout # Import application diff --git a/daphne/server.py b/daphne/server.py index de04b8a..4fb756d 100755 --- a/daphne/server.py +++ b/daphne/server.py @@ -326,3 +326,7 @@ class Server(object): """ if self.action_logger: self.action_logger(protocol, action, details) + + def rotate_log_action(self, log): + self.action_logger.close_stream() + self.action_logger = log \ No newline at end of file