From 6b410e909c220004813272638cddcb063a668c2b Mon Sep 17 00:00:00 2001 From: Steve Laing Date: Tue, 16 Jun 2026 10:54:59 +0100 Subject: [PATCH 1/4] Add logging configuration functions Use a default format and logging level for all loggers. Log to file with rotation and retention rules. Log to console as before --- src/telemetry.py | 61 +++++++++++++++++++- tests/test_telemetry.py | 124 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 183 insertions(+), 2 deletions(-) create mode 100644 tests/test_telemetry.py diff --git a/src/telemetry.py b/src/telemetry.py index b4c80b3..f959c69 100644 --- a/src/telemetry.py +++ b/src/telemetry.py @@ -1,17 +1,74 @@ import logging import os +from pathlib import Path + +from dotenv import load_dotenv logger = logging.getLogger(__name__) +DEFAULT_LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" +DEFAULT_MAX_LOG_FILE_SIZE = 10 * 1024 * 1024 # 10 MB + # Suppress verbose logging from OpenTelemetry and Azure Monitor libraries -for package_name in [ +SUPPRESSED_LOG_PACKAGES = [ "azure.monitor.opentelemetry", "azure.core.pipeline.policies.http_logging_policy", -]: +] + +load_dotenv() + +LOG_DIR = os.getenv("LOG_DIR", "/var/lib/pacs/logs") +os.makedirs(LOG_DIR, exist_ok=True) + +for package_name in SUPPRESSED_LOG_PACKAGES: package_logger = logging.getLogger(package_name) package_logger.setLevel(logging.WARNING) +def configure_logging( + name: str, max_log_size: int = DEFAULT_MAX_LOG_FILE_SIZE, backup_count: int = 5 +) -> logging.Logger: + """Configure logging for the application. + + Args: + name: Optional file to write logs to. If None, logs will only go to the console. + max_log_size: Maximum size of the log file before rotation occurs (default: 10 MB). + backup_count: Number of backup log files to keep (default: 5). + """ + level = os.getenv("LOG_LEVEL", "INFO").upper() + format = os.getenv("LOG_FORMAT", DEFAULT_LOG_FORMAT) + logging.basicConfig(format=format, level=level) + configured_logger = logging.getLogger(name) + configured_logger.setLevel(level) + console_handler = logging.StreamHandler() + console_handler.setFormatter(logging.Formatter(format)) + configured_logger.addHandler(console_handler) + + if os.getenv("LOG_TO_FILE", "true").lower() == "true": + configured_logger.addHandler(log_rotation_handler(name, max_bytes=max_log_size, backup_count=backup_count)) + + return configured_logger + + +def log_rotation_handler(name: str, max_bytes, backup_count) -> logging.Handler: + """Create a rotating log handler. + + Args: + name: The name of the logger, used to derive the file name to write logs to. + max_bytes: The maximum size of the log file before rotation occurs. + backup_count: The number of backup log files to keep. + + Returns: + A configured logging.Handler instance. + """ + from logging.handlers import RotatingFileHandler + + log_file_path = Path(LOG_DIR) / f"{name}.log" + handler = RotatingFileHandler(log_file_path, maxBytes=max_bytes, backupCount=backup_count) + handler.setFormatter(logging.Formatter(DEFAULT_LOG_FORMAT)) + return handler + + def configure_telemetry(service_name: str | None = None) -> None: """Configure OpenTelemetry with Azure Monitor. diff --git a/tests/test_telemetry.py b/tests/test_telemetry.py new file mode 100644 index 0000000..23f24da --- /dev/null +++ b/tests/test_telemetry.py @@ -0,0 +1,124 @@ +import os +from unittest.mock import MagicMock, patch + +import pytest + +import telemetry + + +@pytest.fixture(autouse=True) +def setup_env(monkeypatch, tmp_dir): + monkeypatch.setenv("LOG_DIR", f"{tmp_dir}/logs") + + +def test_configure_log_rotation_creates_rotating_handler(tmp_path): + handler = telemetry.log_rotation_handler( + "test_logger", + max_bytes=1024, + backup_count=3, + ) + + from logging.handlers import RotatingFileHandler + + assert isinstance(handler, RotatingFileHandler) + assert handler.maxBytes == 1024 + assert handler.backupCount == 3 + assert handler.formatter._fmt == telemetry.DEFAULT_LOG_FORMAT + assert handler.baseFilename.endswith("test_logger.log") + + +@patch("telemetry.log_rotation_handler") +@patch("logging.basicConfig") +def test_configure_logging( + mock_basic_config, + mock_configure_rotation, + monkeypatch, +): + mock_handler = MagicMock() + mock_configure_rotation.return_value = mock_handler + + monkeypatch.setenv("LOG_LEVEL", "DEBUG") + monkeypatch.setenv("LOG_FORMAT", "%(levelname)s:%(message)s") + + logger = telemetry.configure_logging( + "app_logger", + max_log_size=2048, + backup_count=2, + ) + + mock_basic_config.assert_called_once_with( + level="DEBUG", + format="%(levelname)s:%(message)s", + ) + + mock_configure_rotation.assert_called_once_with( + "app_logger", + max_bytes=2048, + backup_count=2, + ) + + assert logger.name == "app_logger" + + +def test_configure_logging_adds_handler(): + handler = MagicMock() + + with patch.object( + telemetry, + "log_rotation_handler", + return_value=handler, + ): + logger = telemetry.configure_logging("service_logger") + + assert handler in logger.handlers + + logger.removeHandler(handler) + + +def test_configure_telemetry_no_connection_string(monkeypatch): + monkeypatch.delenv( + "APPLICATIONINSIGHTS_CONNECTION_STRING", + raising=False, + ) + + with patch.dict("sys.modules", {}): + telemetry.configure_telemetry("my-service") + + +def test_configure_telemetry_with_connection_string(monkeypatch): + monkeypatch.setenv( + "APPLICATIONINSIGHTS_CONNECTION_STRING", + "InstrumentationKey=test", + ) + + mock_configure = MagicMock() + + with patch.dict( + "sys.modules", + {"azure.monitor.opentelemetry": MagicMock(configure_azure_monitor=mock_configure)}, + ): + telemetry.configure_telemetry("my-service") + + assert os.environ["OTEL_SERVICE_NAME"] == "my-service" + mock_configure.assert_called_once() + + +def test_configure_telemetry_does_not_override_existing_service_name( + monkeypatch, +): + monkeypatch.setenv( + "APPLICATIONINSIGHTS_CONNECTION_STRING", + "InstrumentationKey=test", + ) + monkeypatch.setenv("OTEL_SERVICE_NAME", "existing-service") + + mock_configure = MagicMock() + + with patch.dict( + "sys.modules", + {"azure.monitor.opentelemetry": MagicMock(configure_azure_monitor=mock_configure)}, + ): + telemetry.configure_telemetry("new-service") + + assert os.environ["OTEL_SERVICE_NAME"] == "existing-service" + mock_configure.assert_called_once() From 067613ffccaf050c4cfa8305bb11e82eeb8d6a35 Mon Sep 17 00:00:00 2001 From: Steve Laing Date: Tue, 16 Jun 2026 10:58:06 +0100 Subject: [PATCH 2/4] Use common logging configuration for all services --- src/modality_emulator.py | 9 ++---- src/mwl_main.py | 20 ++++++------ src/pacs_main.py | 22 +++++++------ src/relay_listener.py | 11 ++----- src/server.py | 22 +++++++------ src/upload_main.py | 32 ++++++++----------- .../test_end_to_end_relay_to_upload.py | 3 ++ tests/scripts/test_database.py | 3 +- tests/test_relay_listener.py | 2 +- tests/test_server.py | 14 ++++++-- 10 files changed, 74 insertions(+), 64 deletions(-) diff --git a/src/modality_emulator.py b/src/modality_emulator.py index 1517a1f..ec6623c 100644 --- a/src/modality_emulator.py +++ b/src/modality_emulator.py @@ -1,5 +1,4 @@ import datetime -import logging import os import time @@ -18,15 +17,11 @@ from services.dicom import PENDING, PENDING_WARNING, SUCCESS from services.mwl import MWLStatus from services.storage import MWLStorage +from telemetry import configure_logging load_dotenv() -logging.basicConfig( - level=os.getenv("LOG_LEVEL", "INFO").upper(), - format=os.getenv("LOG_FORMAT", "%(asctime)s - %(name)s - %(levelname)s - %(message)s"), -) - -logger = logging.getLogger(__name__) +logger = configure_logging("Gateway-Emulator") DICOM_LATERALITIES = ["L", "R"] diff --git a/src/mwl_main.py b/src/mwl_main.py index 9788908..c6929ec 100644 --- a/src/mwl_main.py +++ b/src/mwl_main.py @@ -1,15 +1,16 @@ """Entry point for MWL server.""" -import logging import os from dotenv import load_dotenv from server import MWLServer -from telemetry import configure_telemetry +from telemetry import configure_logging, configure_telemetry load_dotenv() +logger = configure_logging("Gateway-MWL") + def main(): """ @@ -20,23 +21,24 @@ def main(): MWL_PORT: Port to listen on (default: 4243) MWL_DB_PATH: Path to the SQLite database file (default: /var/lib/pacs/worklist.db) """ - logging.basicConfig( - level=os.getenv("LOG_LEVEL", "INFO").upper(), - format=os.getenv("LOG_FORMAT", "%(asctime)s - %(name)s - %(levelname)s - %(message)s"), - ) - mwl_aet = os.getenv("MWL_AET", "MWL_SCP") mwl_port = int(os.getenv("MWL_PORT", "4243")) mwl_db_path = os.getenv("MWL_DB_PATH", "/var/lib/pacs/worklist.db") - mwl_server = MWLServer(mwl_aet, mwl_port, mwl_db_path, block=True) + mwl_server = MWLServer( + ae_title=mwl_aet, + port=mwl_port, + db_path=mwl_db_path, + logger=logger, + block=True, + ) configure_telemetry(service_name="mwl-server") try: mwl_server.start() except KeyboardInterrupt: - logging.info("Received shutdown signal") + logger.info("Received shutdown signal") mwl_server.stop() diff --git a/src/pacs_main.py b/src/pacs_main.py index 10d8473..8c7b9a8 100644 --- a/src/pacs_main.py +++ b/src/pacs_main.py @@ -1,15 +1,16 @@ """Entry point for PACS server.""" -import logging import os from dotenv import load_dotenv from server import PACSServer -from telemetry import configure_telemetry +from telemetry import configure_logging, configure_telemetry load_dotenv() +logger = configure_logging("Gateway-PACS") + def main(): """ @@ -21,25 +22,28 @@ def main(): PACS_STORAGE_PATH: Path to store incoming DICOM files (default: /var/lib/pacs/storage) PACS_DB_PATH: Path to the SQLite database file (default: /var/lib/pacs/pacs.db) """ - logging.basicConfig( - level=os.getenv("LOG_LEVEL", "INFO").upper(), - format=os.getenv("LOG_FORMAT", "%(asctime)s - %(name)s - %(levelname)s - %(message)s"), - ) - pacs_aet = os.getenv("PACS_AET", "SCREENING_PACS") pacs_port = int(os.getenv("PACS_PORT", "4244")) pacs_storage_path = os.getenv("PACS_STORAGE_PATH", "/var/lib/pacs/storage") pacs_db_path = os.getenv("PACS_DB_PATH", "/var/lib/pacs/pacs.db") mwl_db_path = os.getenv("MWL_DB_PATH", "/var/lib/pacs/worklist.db") - pacs_server = PACSServer(pacs_aet, pacs_port, pacs_storage_path, pacs_db_path, block=True, mwl_db_path=mwl_db_path) + pacs_server = PACSServer( + ae_title=pacs_aet, + port=pacs_port, + storage_path=pacs_storage_path, + db_path=pacs_db_path, + logger=logger, + block=True, + mwl_db_path=mwl_db_path, + ) configure_telemetry(service_name="pacs-server") try: pacs_server.start() except KeyboardInterrupt: - logging.info("Received shutdown signal") + logger.info("Received shutdown signal") pacs_server.stop() diff --git a/src/relay_listener.py b/src/relay_listener.py index 788d21e..e9b0689 100644 --- a/src/relay_listener.py +++ b/src/relay_listener.py @@ -9,7 +9,6 @@ import hashlib import hmac import json -import logging import os import time import urllib.parse @@ -23,11 +22,11 @@ from services.mwl.create_worklist_item import CreateWorklistItem from services.mwl.update_worklist_item_status import UpdateWorklistItemStatus from services.storage import MWLStorage -from telemetry import configure_telemetry +from telemetry import configure_logging, configure_telemetry load_dotenv() -logger = logging.getLogger(__name__) +logger = configure_logging("Gateway-Relay") DB_PATH = os.getenv("MWL_DB_PATH", "/var/lib/pacs/worklist.db") AZURE_RELAY_SCOPE = "https://relay.azure.net/.default" @@ -174,13 +173,9 @@ def verify_credentials(): async def main(): - logging.basicConfig( - level=os.getenv("LOG_LEVEL", "INFO").upper(), - format=os.getenv("LOG_FORMAT", "%(asctime)s - %(name)s - %(levelname)s - %(message)s"), - ) configure_telemetry(service_name="relay-listener") - logger.info("Socket Listener Starting...") + logger.info("Gateway Relay Listener Starting...") verify_credentials() storage = MWLStorage(db_path=DB_PATH) diff --git a/src/server.py b/src/server.py index 716e5b0..4bc8c4a 100644 --- a/src/server.py +++ b/src/server.py @@ -36,6 +36,7 @@ def __init__( port: int = 4244, storage_path: str = "/var/lib/pacs/storage", db_path: str = "/var/lib/pacs/pacs.db", + logger: logging.Logger = logger, block: bool = True, mwl_db_path: str = "/var/lib/pacs/worklist.db", ): @@ -54,11 +55,12 @@ def __init__( self.storage = PACSStorage(db_path, storage_path) self.mwl_storage = MWLStorage(mwl_db_path) self.ae = None + self.logger = logger self.block = block def start(self): """Start the PACS server and listen for incoming connections.""" - logger.info(f"Starting PACS server: {self.ae_title} on port {self.port}") + self.logger.info(f"Starting PACS server: {self.ae_title} on port {self.port}") transfer_syntaxes = [ dicom_uid.JPEGLosslessSV1, # Hologic preferred @@ -78,16 +80,16 @@ def start(self): (evt.EVT_C_STORE, CStore(self.storage, mwl_storage=self.mwl_storage).call), ] - logger.info(f"PACS server listening on 0.0.0.0:{self.port}") - logger.info(f"Storage: {self.storage.storage_root}") - logger.info(f"Database: {self.storage.db_path}") + self.logger.info(f"PACS server listening on 0.0.0.0:{self.port}") + self.logger.info(f"Storage: {self.storage.storage_root}") + self.logger.info(f"Database: {self.storage.db_path}") self.ae.start_server(("0.0.0.0", self.port), block=self.block, evt_handlers=handlers) # type: ignore def stop(self): """Stop the PACS server.""" if self.ae: - logger.info("Stopping PACS server") + self.logger.info("Stopping PACS server") self.ae.shutdown() self.storage.close() @@ -100,6 +102,7 @@ def __init__( ae_title: str = "MWL_SCP", port: int = 4243, db_path: str = "/var/lib/pacs/worklist.db", + logger: logging.Logger = logger, block: bool = True, ): """ @@ -115,11 +118,12 @@ def __init__( self.port = port self.storage = MWLStorage(db_path) self.ae = None + self.logger = logger self.block = block def start(self): """Start the MWL server.""" - logger.info(f"Starting MWL server: {self.ae_title} on port {self.port}") + self.logger.info(f"Starting MWL server: {self.ae_title} on port {self.port}") self.ae = AE(ae_title=self.ae_title) self.ae.add_supported_context(Verification) @@ -133,13 +137,13 @@ def start(self): (evt.EVT_N_SET, NSet(self.storage).call), ] - logger.info(f"MWL server listening on 0.0.0.0:{self.port}") - logger.info(f"Database: {self.storage.db_path}") + self.logger.info(f"MWL server listening on 0.0.0.0:{self.port}") + self.logger.info(f"Database: {self.storage.db_path}") self.ae.start_server(("0.0.0.0", self.port), block=self.block, evt_handlers=handlers) # type: ignore def stop(self): """Stop the MWL server.""" if self.ae: - logger.info("Stopping MWL server") + self.logger.info("Stopping MWL server") self.ae.shutdown() diff --git a/src/upload_main.py b/src/upload_main.py index 97c4b47..48ca2aa 100644 --- a/src/upload_main.py +++ b/src/upload_main.py @@ -1,6 +1,5 @@ """Entry point for DICOM upload listener service.""" -import logging import os from dotenv import load_dotenv @@ -9,7 +8,7 @@ from services.dicom.upload_listener import UploadListener from services.dicom.upload_processor import UploadProcessor from services.storage import MWLStorage, PACSStorage -from telemetry import configure_telemetry +from telemetry import configure_logging, configure_telemetry load_dotenv() @@ -28,10 +27,7 @@ def main(): UPLOAD_POLL_INTERVAL: Time in seconds between polling for new uploads (default: 2) UPLOAD_BATCH_SIZE: Number of pending uploads to process in each batch (default: 10) """ - logging.basicConfig( - level=os.getenv("LOG_LEVEL", "INFO").upper(), - format=os.getenv("LOG_FORMAT", "%(asctime)s - %(name)s - %(levelname)s - %(message)s"), - ) + logger = configure_logging("Gateway-Upload") poll_interval = float(os.getenv("UPLOAD_POLL_INTERVAL", "2")) batch_size = int(os.getenv("UPLOAD_BATCH_SIZE", "10")) @@ -56,24 +52,24 @@ def main(): batch_size=batch_size, ) - logging.info("=" * 60) - logging.info("Starting DICOM upload listener service") - logging.info("=" * 60) - logging.info(f"PACS DB: {pacs_storage.db_path}") - logging.info(f"Worklist DB: {mwl_storage.db_path}") - logging.info(f"Storage: {pacs_storage.storage_root}") - logging.info(f"Poll interval: {poll_interval}s") - logging.info(f"Batch size: {batch_size}") - logging.info(f"Max retries: {max_retries}") - logging.info(f"API endpoint: {uploader.api_endpoint}") - logging.info("=" * 60) + logger.info("=" * 60) + logger.info("Starting DICOM upload listener service") + logger.info("=" * 60) + logger.info(f"PACS DB: {pacs_storage.db_path}") + logger.info(f"Worklist DB: {mwl_storage.db_path}") + logger.info(f"Storage: {pacs_storage.storage_root}") + logger.info(f"Poll interval: {poll_interval}s") + logger.info(f"Batch size: {batch_size}") + logger.info(f"Max retries: {max_retries}") + logger.info(f"API endpoint: {uploader.api_endpoint}") + logger.info("=" * 60) configure_telemetry(service_name="upload-listener") try: listener.start() except KeyboardInterrupt: - logging.info("Received shutdown signal") + logger.info("Received shutdown signal") listener.stop() diff --git a/tests/integration/test_end_to_end_relay_to_upload.py b/tests/integration/test_end_to_end_relay_to_upload.py index 1d1adcc..c2fb458 100644 --- a/tests/integration/test_end_to_end_relay_to_upload.py +++ b/tests/integration/test_end_to_end_relay_to_upload.py @@ -6,6 +6,7 @@ """ import json +import logging from unittest.mock import Mock, patch import pytest @@ -81,6 +82,7 @@ def mwl_server(self, mwl_storage): server.port = 4243 server.storage = mwl_storage server.ae = None + server.logger = logging.getLogger("MWLServer") server.block = False return server @@ -93,6 +95,7 @@ def pacs_server(self, pacs_storage, mwl_storage): server.storage = pacs_storage server.mwl_storage = mwl_storage server.ae = None + server.logger = logging.getLogger("PACSServer") server.block = False return server diff --git a/tests/scripts/test_database.py b/tests/scripts/test_database.py index 3d73b6e..8c1990d 100644 --- a/tests/scripts/test_database.py +++ b/tests/scripts/test_database.py @@ -1,8 +1,9 @@ -import pytest import sqlite3 import sys from pathlib import Path +import pytest + sys.path.append(f"{Path(__file__).parent.parent.parent}/scripts/python") from database import backup_database, reset_worklist_database diff --git a/tests/test_relay_listener.py b/tests/test_relay_listener.py index 38d2ee9..e0e00af 100644 --- a/tests/test_relay_listener.py +++ b/tests/test_relay_listener.py @@ -252,7 +252,7 @@ async def test_main_handles_connection_closed_and_keyboard_interrupt( await main() assert relay_listener_instance.listen.call_count == 3 - mock_logger.info.assert_any_call("Socket Listener Starting...") + mock_logger.info.assert_any_call("Gateway Relay Listener Starting...") mock_logger.warning.assert_any_call("Connection closed with code 1011: Something went wrong") mock_logger.warning.assert_any_call("Retrying in 5 seconds...") mock_logger.warning.assert_any_call("Connection closed with code 1014: Bad gateway") diff --git a/tests/test_server.py b/tests/test_server.py index 19f583a..dd8f6e7 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -17,8 +17,15 @@ @patch(f"{PACSServer.__module__}.PACSStorage") class TestPACSServer: def test_init(self, mock_pacs_storage, mock_mwl_storage, tmp_dir): + mock_logger = MagicMock() subject = PACSServer( - "Custom AE Title", 2222, tmp_dir, f"{tmp_dir}/test.db", False, mwl_db_path=f"{tmp_dir}/worklist.db" + "Custom AE Title", + 2222, + tmp_dir, + f"{tmp_dir}/test.db", + logger=mock_logger, + block=False, + mwl_db_path=f"{tmp_dir}/worklist.db", ) assert subject.ae_title == "Custom AE Title" @@ -26,6 +33,7 @@ def test_init(self, mock_pacs_storage, mock_mwl_storage, tmp_dir): assert subject.storage == mock_pacs_storage.return_value assert subject.mwl_storage == mock_mwl_storage.return_value assert subject.ae is None + assert subject.logger == mock_logger assert subject.block is False mock_pacs_storage.assert_called_once_with(f"{tmp_dir}/test.db", tmp_dir) @@ -80,12 +88,14 @@ def test_stop(self, *_): @patch(f"{MWLServer.__module__}.MWLStorage") class TestMWLServer: def test_init(self, mock_storage): - subject = MWLServer("CUSTOM_MWL", 11112, "/custom/path/worklist.db", False) + mock_logger = MagicMock() + subject = MWLServer("CUSTOM_MWL", 11112, "/custom/path/worklist.db", logger=mock_logger, block=False) assert subject.ae_title == "CUSTOM_MWL" assert subject.port == 11112 assert subject.storage == mock_storage.return_value assert subject.ae is None + assert subject.logger == mock_logger assert subject.block is False mock_storage.assert_called_once_with("/custom/path/worklist.db") From 30ce235d7ea49c61517833ac23383ca1b576caf7 Mon Sep 17 00:00:00 2001 From: Steve Laing Date: Tue, 16 Jun 2026 10:58:30 +0100 Subject: [PATCH 3/4] Add logging defaults to env --- .env.development | 2 ++ scripts/bash/deploy_arc_ring.sh | 1 + 2 files changed, 3 insertions(+) diff --git a/.env.development b/.env.development index ab075ac..63d38df 100644 --- a/.env.development +++ b/.env.development @@ -28,3 +28,5 @@ PACS_DB_PATH=/var/lib/pacs/pacs.db # General Configuration LOG_LEVEL=INFO +LOG_DIR=/var/lib/pacs/logs +LOG_TO_FILE=false diff --git a/scripts/bash/deploy_arc_ring.sh b/scripts/bash/deploy_arc_ring.sh index 6375b49..e6d5561 100755 --- a/scripts/bash/deploy_arc_ring.sh +++ b/scripts/bash/deploy_arc_ring.sh @@ -89,6 +89,7 @@ PACS_PORT=11112 PACS_STORAGE_PATH=${BASE_PATH}/data/storage PACS_DB_PATH=${BASE_PATH}/data/pacs.db LOG_LEVEL=INFO +LOG_DIR=${BASE_PATH}/logs SAMPLE_IMAGES_PATH=${BASE_PATH}/current/sample_images" # Cross-platform base64 encoding (works on macOS and Linux) From 3384f1cde4108ceb8ad0b4bf8cb356b5cd25123d Mon Sep 17 00:00:00 2001 From: Steve Laing Date: Tue, 16 Jun 2026 11:01:48 +0100 Subject: [PATCH 4/4] Remove Windows OS service config to log stderr and stdout to file Python processes handle this now. --- scripts/powershell/deploy.ps1 | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/powershell/deploy.ps1 b/scripts/powershell/deploy.ps1 index 45d2232..eb7f95b 100644 --- a/scripts/powershell/deploy.ps1 +++ b/scripts/powershell/deploy.ps1 @@ -522,10 +522,6 @@ foreach ($svc in $services) { Invoke-Nssm -NssmPath $nssmExe -Arguments @("set", $svc.Name, "Description", "Manage Breast Screening Gateway - $($svc.Name)") -Description "set Description" Invoke-Nssm -NssmPath $nssmExe -Arguments @("set", $svc.Name, "Start", "SERVICE_AUTO_START") -Description "set Start" - $svcLog = Join-Path $logsDir "$($svc.Name).log" - Invoke-Nssm -NssmPath $nssmExe -Arguments @("set", $svc.Name, "AppStdout", "$svcLog") -Description "set AppStdout" - Invoke-Nssm -NssmPath $nssmExe -Arguments @("set", $svc.Name, "AppStderr", "$svcLog") -Description "set AppStderr" - try { Start-Service -Name $svc.Name $startedServices += $svc.Name