Skip to content

Commit e573538

Browse files
committed
create seperate logger per module
1 parent 53c90da commit e573538

File tree

1 file changed

+58
-32
lines changed

1 file changed

+58
-32
lines changed

lambdas/id_sync/src/record_processor.py

Lines changed: 58 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,41 @@
1-
from common.clients import logger
1+
import logging
2+
import json
3+
import ast
24
from typing import Dict, Any
5+
6+
from common.clients import logger as clients_logger
37
from pds_details import pds_get_patient_id, pds_get_patient_details
48
from ieds_db_operations import (
59
ieds_update_patient_id,
610
extract_patient_resource_from_item,
711
get_items_from_patient_id,
812
)
913
from utils import make_status
10-
import json
11-
import ast
14+
15+
# Module-local logger for records processing. Use this for logs local to this module
16+
# so they can be managed separately from the shared clients logger.
17+
module_logger = logging.getLogger(__name__)
18+
# Keep a module-level `logger` symbol for backwards compatibility with tests
19+
# and other modules that patch or import `record_processor.logger`.
20+
logger = module_logger
1221

1322

1423
def process_record(event_record: Dict[str, Any]) -> Dict[str, Any]:
1524

16-
logger.info("process_record. Processing record: %s", event_record)
17-
# Probe logger configuration to help debug missing logs in CloudWatch
25+
module_logger.info("process_record. Processing record: %s", event_record)
26+
# Probe logger configuration to help debug missing logs in CloudWatch.
27+
# Log both the module-local logger and the shared clients logger so it's
28+
# possible to compare their handlers/levels in CloudWatch.
1829
try:
19-
logger.info(
20-
"probe: logger id=%s module=%s level=%d handlers=%d",
21-
hex(id(logger)), getattr(logger, "__module__", None),
22-
logger.getEffectiveLevel(), len(logger.handlers),
30+
module_logger.info(
31+
"probe: module_logger id=%s module=%s level=%d handlers=%d",
32+
hex(id(module_logger)), getattr(module_logger, "__module__", None),
33+
module_logger.getEffectiveLevel(), len(module_logger.handlers),
34+
)
35+
module_logger.info(
36+
"probe: clients_logger id=%s module=%s level=%d handlers=%d",
37+
hex(id(clients_logger)), getattr(clients_logger, "__module__", None),
38+
clients_logger.getEffectiveLevel(), len(clients_logger.handlers),
2339
)
2440
except Exception:
2541
# Keep probe non-fatal in production
@@ -34,18 +50,18 @@ def process_record(event_record: Dict[str, Any]) -> Dict[str, Any]:
3450
try:
3551
body = ast.literal_eval(body_text)
3652
except (ValueError, SyntaxError):
37-
logger.error("Failed to parse body: %s", body_text)
53+
module_logger.error("Failed to parse body: %s", body_text)
3854
return {"status": "error", "message": "Invalid body format"}
3955
else:
4056
body = body_text
4157

4258
nhs_number = body.get("subject")
4359
# Reached
44-
logger.info("process record NHS number: %s", nhs_number)
60+
module_logger.info("process record NHS number: %s", nhs_number)
4561
if nhs_number:
4662
return process_nhs_number(nhs_number)
4763

48-
logger.info("No NHS number found in event record")
64+
module_logger.info("No NHS number found in event record")
4965
return {"status": "error", "message": "No NHS number found in event record"}
5066

5167

@@ -59,20 +75,21 @@ def process_nhs_number(nhs_number: str) -> Dict[str, Any]:
5975
if new_nhs_number == nhs_number:
6076
return make_status("No update required", nhs_number)
6177

62-
logger.info("Update patient ID from %s to %s", nhs_number, new_nhs_number)
78+
module_logger.info("Update patient ID from %s to %s", nhs_number, new_nhs_number)
6379

6480
try:
6581
# Fetch PDS Patient resource and IEDS resources for the old NHS number
6682
pds_patient_resource, ieds_resources = fetch_pds_and_ieds_resources(nhs_number)
6783
except Exception as e:
68-
logger.exception("process_nhs_number: failed to fetch demographic details: %s", e)
84+
module_logger.exception("process_nhs_number: failed to fetch demographic details: %s", e)
6985
return make_status(str(e), nhs_number, "error")
7086

71-
logger.info("Fetched PDS details: %s", pds_patient_resource)
72-
logger.info("Fetched IEDS resources. IEDS count: %d", len(ieds_resources), ieds_resources if ieds_resources else 0)
87+
module_logger.info("Fetched PDS details: %s", pds_patient_resource)
88+
module_logger.info("Fetched IEDS resources. IEDS count: %d", len(ieds_resources),
89+
ieds_resources if ieds_resources else 0)
7390

7491
if not ieds_resources:
75-
logger.info("No IEDS records returned for NHS number: %s", nhs_number)
92+
module_logger.info("No IEDS records returned for NHS number: %s", nhs_number)
7693
return make_status(f"No records returned for ID: {nhs_number}", nhs_number)
7794

7895
# Compare demographics from PDS to each IEDS item, keep only matching records
@@ -87,7 +104,7 @@ def process_nhs_number(nhs_number: str) -> Dict[str, Any]:
87104
discarded_records.append(detail)
88105

89106
if not matching_records:
90-
logger.info("No records matched PDS demographics: %d", discarded_count, discarded_records)
107+
module_logger.info("No records matched PDS demographics: %d %s", discarded_count, discarded_records)
91108
return make_status("No records matched PDS demographics; update skipped", nhs_number)
92109

93110
response = ieds_update_patient_id(
@@ -102,22 +119,26 @@ def process_nhs_number(nhs_number: str) -> Dict[str, Any]:
102119

103120
# Function to fetch PDS Patient details and IEDS Immunisation records
104121
def fetch_pds_and_ieds_resources(nhs_number: str):
105-
logger.info("fetch_pds_and_ieds_resources: fetching for %s", nhs_number)
122+
module_logger.info("fetch_pds_and_ieds_resources: fetching for %s", nhs_number)
106123
try:
107124
pds = pds_get_patient_details(nhs_number)
108-
logger.info("fetch_pds_resources: fetching for %s", pds)
125+
module_logger.info("fetch_pds_resources: fetching for %s", pds)
109126
except Exception as e:
110-
logger.exception("fetch_pds_and_ieds_resources: failed to fetch PDS details for %s", nhs_number)
127+
module_logger.exception(
128+
"fetch_pds_and_ieds_resources: failed to fetch PDS details for %s", nhs_number
129+
)
111130
raise RuntimeError("Failed to fetch PDS details") from e
112131

113132
try:
114133
ieds = get_items_from_patient_id(nhs_number)
115134
except Exception as e:
116-
logger.exception("fetch_pds_and_ieds_resources: failed to fetch IEDS items for %s", nhs_number)
135+
module_logger.exception(
136+
"fetch_pds_and_ieds_resources: failed to fetch IEDS items for %s", nhs_number
137+
)
117138
raise RuntimeError("Failed to fetch IEDS items") from e
118139

119140
count = len(ieds)
120-
logger.info("fetch_pds_and_ieds_resources: fetched PDS and %d IEDS items for %s", count, nhs_number)
141+
module_logger.info("fetch_pds_and_ieds_resources: fetched PDS and %d IEDS items for %s", count, nhs_number)
121142
return pds, ieds
122143

123144

@@ -156,40 +177,45 @@ def normalize_strings(item: Any) -> str | None:
156177
pds_name = normalize_strings(extract_normalized_name_from_patient(pds_details))
157178
pds_gender = normalize_strings(pds_details.get("gender"))
158179
pds_birth = normalize_strings(pds_details.get("birthDate"))
159-
logger.info("demographics_match: demographics match for %s", pds_name, pds_gender, pds_birth)
180+
module_logger.info(
181+
"demographics_match: demographics from PDS: %s %s %s",
182+
pds_name,
183+
pds_gender,
184+
pds_birth,
185+
)
160186

161187
# Retrieve patient resource from IEDS item
162188
patient = extract_patient_resource_from_item(ieds_item)
163189
if not patient:
164-
logger.info("demographics_match: no patient resource in IEDS table item")
190+
module_logger.info("demographics_match: no patient resource in IEDS table item")
165191
return False
166192

167193
# normalize patient fields from IEDS
168194
ieds_name = normalize_strings(extract_normalized_name_from_patient(patient))
169195
ieds_gender = normalize_strings(patient.get("gender"))
170196
ieds_birth = normalize_strings(patient.get("birthDate"))
171-
logger.info("demographics_match: demographics match for %s", patient)
197+
module_logger.info("demographics_match: demographics from IEDS: %s", patient)
172198

173199
# All required fields must be present
174200
if not all([pds_name, pds_gender, pds_birth, ieds_name, ieds_gender, ieds_birth]):
175-
logger.info("demographics_match: missing required demographics")
201+
module_logger.info("demographics_match: missing required demographics")
176202
return False
177203

178204
# Compare fields
179205
if pds_birth != ieds_birth:
180-
logger.info("demographics_match: birthDate mismatch %s != %s", pds_birth, ieds_birth)
206+
module_logger.info("demographics_match: birthDate mismatch %s != %s", pds_birth, ieds_birth)
181207
return False
182208

183209
if pds_gender != ieds_gender:
184-
logger.info("demographics_match: gender mismatch %s != %s", pds_gender, ieds_gender)
210+
module_logger.info("demographics_match: gender mismatch %s != %s", pds_gender, ieds_gender)
185211
return False
186212

187213
if pds_name != ieds_name:
188-
logger.info("demographics_match: name mismatch %s != %s", pds_name, ieds_name)
214+
module_logger.info("demographics_match: name mismatch %s != %s", pds_name, ieds_name)
189215
return False
190216

191-
logger.info("demographics_match: demographics match for %s", patient)
217+
module_logger.info("demographics_match: demographics match for %s", patient)
192218
return True
193219
except Exception:
194-
logger.exception("demographics_match: comparison failed with exception")
220+
module_logger.exception("demographics_match: comparison failed with exception")
195221
return False

0 commit comments

Comments
 (0)