From baae8c019dd40f66bc1bdc6fa7f6425bc9e0bbc6 Mon Sep 17 00:00:00 2001 From: Kushal Das Date: Mon, 20 Jan 2020 15:01:58 +0530 Subject: [PATCH] Adds logging to /var/log/syslog using rsyslog Also adds a new test to test configure_logging function call. --- securedrop_proxy/entrypoint.py | 15 ++++++++++++++- tests/test_entrypoint.py | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/securedrop_proxy/entrypoint.py b/securedrop_proxy/entrypoint.py index cee130f..dbd5fa4 100755 --- a/securedrop_proxy/entrypoint.py +++ b/securedrop_proxy/entrypoint.py @@ -11,8 +11,9 @@ import logging import os import sys +import platform -from logging.handlers import TimedRotatingFileHandler +from logging.handlers import TimedRotatingFileHandler, SysLogHandler from securedrop_proxy import main from securedrop_proxy import proxy @@ -83,7 +84,19 @@ def configure_logging() -> None: handler.setFormatter(formatter) handler.setLevel(logging.DEBUG) + # For rsyslog handler + if platform.system() != "Linux": # pragma: no cover + syslog_file = "/var/run/syslog" + else: + syslog_file = "/dev/log" + + sysloghandler = SysLogHandler(address=syslog_file) + sysloghandler.setFormatter(formatter) + # set up primary log log = logging.getLogger() log.setLevel(LOGLEVEL) log.addHandler(handler) + + # add the secondard logger + log.addHandler(sysloghandler) diff --git a/tests/test_entrypoint.py b/tests/test_entrypoint.py index 8a5b0ea..842cb86 100644 --- a/tests/test_entrypoint.py +++ b/tests/test_entrypoint.py @@ -3,8 +3,10 @@ import io import json import os +import platform import tempfile import unittest.mock +from unittest.mock import patch import vcr from securedrop_proxy import entrypoint @@ -46,6 +48,22 @@ def test_missing_config(self): body["error"], "Configuration file does not exist at {}".format(config_path) ) + @patch("securedrop_proxy.entrypoint.logging") + @patch("securedrop_proxy.entrypoint.SysLogHandler") + @patch("securedrop_proxy.entrypoint.TimedRotatingFileHandler") + def test_configure_logging(self, mock_log_conf, mock_log_conf_sys, mock_logging): + with sdhome() as homedir: + mock_log_file = os.path.join(homedir, 'logs', 'proxy.log') + entrypoint.configure_logging() + mock_log_conf.assert_called_once_with(mock_log_file) + # For rsyslog handler + if platform.system() != "Linux": # pragma: no cover + syslog_file = "/var/run/syslog" + else: + syslog_file = "/dev/log" + mock_log_conf_sys.assert_called_once_with(address=syslog_file) + mock_logging.getLogger.assert_called_once_with() + def test_unwritable_log_folder(self): """ Tests a permission problem in `configure_logging`.