Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Remove non-dedicated logging options and command line arguments #5678

Merged
merged 7 commits into from
Jul 18, 2019
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/5678.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Synapse will now always redirect standard I/O to the logging system.
1 change: 1 addition & 0 deletions changelog.d/5678.removal
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Synapse now no longer accepts the `-v`/`--verbose`, `-f`/`--log-file`, `-n`/`--no-redirect-stdio`, or `--log-config` command line flags, and removes the deprecated `verbose`, `no_redirect_stdio`, and `log_file` configuration file options. Users of these options should migrate their options into the dedicated log configuration.
99 changes: 11 additions & 88 deletions synapse/config/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,7 @@

class LoggingConfig(Config):
def read_config(self, config, **kwargs):
self.verbosity = config.get("verbose", 0)
self.no_redirect_stdio = config.get("no_redirect_stdio", False)
self.log_config = self.abspath(config.get("log_config"))
self.log_file = self.abspath(config.get("log_file"))

def generate_config_section(self, config_dir_path, server_name, **kwargs):
log_config = os.path.join(config_dir_path, server_name + ".log.config")
Expand All @@ -93,46 +90,6 @@ def generate_config_section(self, config_dir_path, server_name, **kwargs):
% locals()
)

def read_arguments(self, args):
if args.verbose is not None:
self.verbosity = args.verbose
if args.no_redirect_stdio is not None:
self.no_redirect_stdio = args.no_redirect_stdio
if args.log_config is not None:
self.log_config = args.log_config
if args.log_file is not None:
self.log_file = args.log_file

def add_arguments(cls, parser):
logging_group = parser.add_argument_group("logging")
logging_group.add_argument(
"-v",
"--verbose",
dest="verbose",
action="count",
help="The verbosity level. Specify multiple times to increase "
"verbosity. (Ignored if --log-config is specified.)",
)
logging_group.add_argument(
"-f",
"--log-file",
dest="log_file",
help="File to log to. (Ignored if --log-config is specified.)",
)
logging_group.add_argument(
"--log-config",
dest="log_config",
default=None,
help="Python logging config file",
)
logging_group.add_argument(
"-n",
"--no-redirect-stdio",
action="store_true",
default=None,
help="Do not redirect stdout/stderr to the log",
)

def generate_files(self, config, config_dir_path):
log_config = config.get("log_config")
if log_config and not os.path.exists(log_config):
Expand All @@ -152,58 +109,29 @@ def setup_logging(config, use_worker_options=False):
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'.
use_worker_options (bool): True to use the 'worker_log_config' option
instead of 'log_config'.

register_sighup (func | None): Function to call to register a
sighup handler.
"""
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

log_format = (
"%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s"
" - %(message)s"
)

if log_config is None:
# We don't have a logfile, so fall back to the 'verbosity' param from
# the config or cmdline. (Note that we generate a log config for new
# installs, so this will be an unusual case)
level = logging.INFO
level_for_storage = logging.INFO
if config.verbosity:
level = logging.DEBUG
if config.verbosity > 1:
level_for_storage = logging.DEBUG
log_format = (
"%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s"
" - %(message)s"
)

logger = logging.getLogger("")
logger.setLevel(level)

logging.getLogger("synapse.storage.SQL").setLevel(level_for_storage)
logger.setLevel(logging.INFO)
logging.getLogger("synapse.storage.SQL").setLevel(logging.INFO)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: this is probably redundant, since it's the same as the root logger?


formatter = logging.Formatter(log_format)
if log_file:
# TODO: Customisable file size / backup count
handler = logging.handlers.RotatingFileHandler(
log_file, maxBytes=(1000 * 1000 * 100), backupCount=3, encoding="utf8"
)

def sighup(signum, stack):
logger.info("Closing log file due to SIGHUP")
handler.doRollover()
logger.info("Opened new log file due to SIGHUP")

else:
handler = logging.StreamHandler()

def sighup(*args):
pass

handler = logging.StreamHandler()
handler.setFormatter(formatter)

handler.addFilter(LoggingContextFilter(request=""))

logger.addHandler(handler)
else:

Expand All @@ -217,8 +145,7 @@ def sighup(*args):
logging.info("Reloaded log config from %s due to SIGHUP", log_config)

load_log_config()

appbase.register_sighup(sighup)
appbase.register_sighup(sighup)

# make sure that the first thing we log is a thing we can grep backwards
# for
Expand Down Expand Up @@ -252,8 +179,4 @@ def _log(event):

return observer(event)

globalLogBeginner.beginLoggingTo(
[_log], redirectStandardIO=not config.no_redirect_stdio
)
if not config.no_redirect_stdio:
print("Redirected stdout/stderr to logs")
globalLogBeginner.beginLoggingTo([_log], redirectStandardIO=True)
6 changes: 0 additions & 6 deletions synapse/config/workers.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ def read_config(self, config, **kwargs):
self.worker_listeners = config.get("worker_listeners", [])
self.worker_daemonize = config.get("worker_daemonize")
self.worker_pid_file = config.get("worker_pid_file")
self.worker_log_file = config.get("worker_log_file")
self.worker_log_config = config.get("worker_log_config")

# The host used to connect to the main synapse
self.worker_replication_host = config.get("worker_replication_host", None)
Expand Down Expand Up @@ -78,9 +76,5 @@ def read_arguments(self, args):

if args.daemonize is not None:
self.worker_daemonize = args.daemonize
if args.log_config is not None:
self.worker_log_config = args.log_config
if args.log_file is not None:
self.worker_log_file = args.log_file
if args.manhole is not None:
self.worker_manhole = args.worker_manhole