From e5d443750e30b7ea61bd183d5270820bc4e9a81a Mon Sep 17 00:00:00 2001 From: Michael Merickel Date: Sun, 29 Nov 2020 15:06:33 -0600 Subject: fix a crash in the MultiSocketServer startup and re-enable startup messages --- src/waitress/runner.py | 8 ++++++++ src/waitress/server.py | 7 +++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/waitress/runner.py b/src/waitress/runner.py index c23ca0e..949fdb9 100644 --- a/src/waitress/runner.py +++ b/src/waitress/runner.py @@ -16,6 +16,7 @@ import getopt +import logging import os import os.path import re @@ -23,6 +24,7 @@ import sys from waitress import serve from waitress.adjustments import Adjustments +from waitress.utilities import logger HELP = """\ Usage: @@ -260,6 +262,12 @@ def run(argv=sys.argv, _serve=serve): show_help(sys.stderr, name, "Specify one application only") return 1 + # set a default level for the logger only if it hasn't been set explicitly + # note that this level does not override any parent logger levels, + # handlers, etc but without it no log messages are emitted by default + if logger.level == logging.NOTSET: + logger.setLevel(logging.INFO) + try: module, obj_name = match(args[0]) except ValueError as exc: diff --git a/src/waitress/server.py b/src/waitress/server.py index fe7b6da..55cffe9 100644 --- a/src/waitress/server.py +++ b/src/waitress/server.py @@ -125,10 +125,11 @@ def create_server( # In this case we have no need to use a MultiSocketServer return last_serv + log_info = last_serv.log_info # Return a class that has a utility function to print out the sockets it's # listening on, and has a .run() function. All of the TcpWSGIServers # registered themselves in the map above. - return MultiSocketServer(map, adj, effective_listen, dispatcher) + return MultiSocketServer(map, adj, effective_listen, dispatcher, log_info) # This class is only ever used if we have multiple listen sockets. It allows @@ -143,11 +144,13 @@ class MultiSocketServer: adj=None, effective_listen=None, dispatcher=None, + log_info=None, ): self.adj = adj self.map = map self.effective_listen = effective_listen self.task_dispatcher = dispatcher + self.log_info = log_info def print_listen(self, format_str): # pragma: nocover for l in self.effective_listen: @@ -344,7 +347,7 @@ class BaseWSGIServer(wasyncore.dispatcher): if (not channel.requests) and channel.last_activity < cutoff: channel.will_close = True - def print_listen(self, format_str): # pragma: nocover + def print_listen(self, format_str): # pragma: no cover self.log_info(format_str.format(self.effective_host, self.effective_port)) def close(self): -- cgit v1.2.1 From 994b5569a37e437d89deb766a9b182a95e1e64ab Mon Sep 17 00:00:00 2001 From: Michael Merickel Date: Sun, 29 Nov 2020 15:11:49 -0600 Subject: add changelog for #332 --- CHANGES.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 2b07f02..d7a8b2c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,9 @@ +unreleased +---------- + +- Fix a crash on startup when listening to multiple interfaces. + See https://github.com/Pylons/waitress/pull/332 + 2.0.0b0 (2020-11-26) -------------------- -- cgit v1.2.1