Skip to content

Commit 2358cfe

Browse files
committed
better error logging
1 parent 8ab8401 commit 2358cfe

File tree

6 files changed

+30
-17
lines changed

6 files changed

+30
-17
lines changed

packages/slackBotFunction/app/core/config.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import os
77
import json
8+
import traceback
89
import boto3
910
from slack_bolt import App
1011
from aws_lambda_powertools import Logger
@@ -40,8 +41,8 @@
4041

4142
except json.JSONDecodeError as e:
4243
raise ValueError(f"Invalid JSON in Parameter Store: {e}")
43-
except Exception as e:
44-
logger.error("Configuration error", extra={"error": str(e)})
44+
except Exception:
45+
logger.error("Configuration error", extra={"error": traceback.format_exc()})
4546
raise
4647

4748
# initialise the Slack app

packages/slackBotFunction/app/services/prompt_loader.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
import traceback
23
import boto3
34
from botocore.exceptions import ClientError
45
from app.services.exceptions import PromptNotFoundError, PromptLoadError
@@ -52,7 +53,12 @@ def load_prompt(logger, prompt_name: str, prompt_version: str = None) -> str:
5253

5354
logger.error(
5455
f"Failed to load prompt '{prompt_name}' version '{prompt_version}': {error_code} - {error_message}",
55-
extra={"prompt_name": prompt_name, "error_code": error_code, "requested_version": prompt_version},
56+
extra={
57+
"prompt_name": prompt_name,
58+
"error_code": error_code,
59+
"requested_version": prompt_version,
60+
"error": traceback.format_exc(),
61+
},
5662
)
5763
raise PromptLoadError(
5864
f"Failed to load prompt '{prompt_name}' version '{prompt_version}': {error_code} - {error_message}"
@@ -61,7 +67,7 @@ def load_prompt(logger, prompt_name: str, prompt_version: str = None) -> str:
6167
except Exception as e:
6268
logger.error(
6369
"Unexpected error loading prompt",
64-
extra={"prompt_name": prompt_name, "error": str(e), "error_type": type(e).__name__},
70+
extra={"prompt_name": prompt_name, "error_type": type(e).__name__, "error": traceback.format_exc()},
6571
)
6672
raise PromptLoadError(f"Unexpected error loading prompt '{prompt_name}': {e}")
6773

@@ -82,6 +88,6 @@ def get_prompt_id_from_name(logger, client, prompt_name: str) -> str | None:
8288
logger.error("No prompt found with name", extra={"prompt_name": prompt_name})
8389
return None
8490

85-
except ClientError as e:
86-
logger.error("Failed to list prompts", extra={"error": str(e)})
91+
except ClientError:
92+
logger.error("Failed to list prompts", extra={"error": traceback.format_exc()})
8793
return None

packages/slackBotFunction/app/services/query_reformulator.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
22
import json
3+
import traceback
34
import boto3
45
from .prompt_loader import load_prompt
56
from .exceptions import ConfigurationError
@@ -71,6 +72,7 @@ def reformulate_query(logger, user_query: str) -> str:
7172
"prompt_name": os.environ.get("QUERY_REFORMULATION_PROMPT_NAME"),
7273
"prompt_version": os.environ.get("QUERY_REFORMULATION_PROMPT_VERSION", "auto"),
7374
"error_type": type(e).__name__,
75+
"error": traceback.format_exc(),
7476
},
7577
)
7678

packages/slackBotFunction/app/slack/slack_events.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import re
77
import time
8+
import traceback
89
import boto3
910
from slack_sdk import WebClient
1011
from app.core.config import (
@@ -86,8 +87,8 @@ def process_async_slack_event(slack_event_data):
8687
)
8788
client.chat_postMessage(channel=channel, text=response_text, thread_ts=thread_ts)
8889

89-
except Exception as err:
90-
logger.error("Error processing message", extra={"event_id": event_id, "error": str(err)})
90+
except Exception:
91+
logger.error("Error processing message", extra={"event_id": event_id, "error": traceback.format_exc()})
9192

9293
# incase Slack API call fails, we still want to log the error
9394
try:
@@ -96,8 +97,8 @@ def process_async_slack_event(slack_event_data):
9697
text=BOT_MESSAGES["error_response"],
9798
thread_ts=thread_ts,
9899
)
99-
except Exception as post_err:
100-
logger.error("Failed to post error message", extra={"error": str(post_err)})
100+
except Exception:
101+
logger.error("Failed to post error message", extra={"error": traceback.format_exc()})
101102

102103

103104
def get_conversation_session(conversation_key):
@@ -110,8 +111,8 @@ def get_conversation_session(conversation_key):
110111
logger.info("Found existing session", extra={"conversation_key": conversation_key})
111112
return response["Item"]["session_id"]
112113
return None
113-
except Exception as e:
114-
logger.error("Error getting session", extra={"error": str(e)})
114+
except Exception:
115+
logger.error("Error getting session", extra={"error": traceback.format_exc()})
115116
return None
116117

117118

@@ -134,8 +135,8 @@ def store_conversation_session(conversation_key, session_id, user_id, channel_id
134135
}
135136
)
136137
logger.info("Stored session", extra={"session_id": session_id, "conversation_key": conversation_key})
137-
except Exception as e:
138-
logger.error("Error storing session", extra={"error": str(e)})
138+
except Exception:
139+
logger.error("Error storing session", extra={"error": traceback.format_exc()})
139140

140141

141142
def query_bedrock(user_query, session_id=None):

packages/slackBotFunction/app/slack/slack_handlers.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import time
66
import json
7+
import traceback
78
import boto3
89
from botocore.exceptions import ClientError
910
from app.core.config import table, bot_token, logger
@@ -78,7 +79,7 @@ def is_duplicate_event(event_id):
7879
except ClientError as e:
7980
if e.response["Error"]["Code"] == "ConditionalCheckFailedException":
8081
return True # Duplicate
81-
logger.error("Error checking event duplication", extra={"error": str(e)})
82+
logger.error("Error checking event duplication", extra={"error": traceback.format_exc()})
8283
return False
8384

8485

@@ -99,5 +100,5 @@ def trigger_async_processing(event_data):
99100
Payload=json.dumps({"async_processing": True, "slack_event": event_data}),
100101
)
101102
logger.info("Async processing triggered successfully")
102-
except Exception as e:
103-
logger.error("Failed to trigger async processing", extra={"error": str(e)})
103+
except Exception:
104+
logger.error("Failed to trigger async processing", extra={"error": traceback.format_exc()})

packages/syncKnowledgeBaseFunction/app/handler.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"""
88

99
import time
10+
import traceback
1011
import boto3
1112
from botocore.exceptions import ClientError
1213
from app.config.config import KNOWLEDGEBASE_ID, DATA_SOURCE_ID, SUPPORTED_FILE_TYPES, logger
@@ -259,6 +260,7 @@ def handler(event, context):
259260
"error_type": type(e).__name__,
260261
"error_message": str(e),
261262
"duration_ms": round((time.time() - start_time) * 1000, 2),
263+
"error": traceback.format_exc(),
262264
},
263265
)
264266
return {"statusCode": 500, "body": f"Unexpected error: {str(e)}"}

0 commit comments

Comments
 (0)