Error Handling Patterns
MANDATORY: All function implementations MUST include proper error handling with logging.
Python
import logging
try:
# Your function logic here
result = process_data(data)
logging.info(f"Success: processed {item_id}")
except Exception as error:
logging.error(f"Error processing {item_id}: {error}")
raise # Re-raise to trigger retry/dead-letterTypeScript
try {
// Your function logic here
const result = await processData(data);
context.log(`Success: processed ${itemId}`);
} catch (error) {
context.error(`Error processing ${itemId}:`, error);
throw error; // Re-raise to trigger retry/dead-letter
}JavaScript
try {
// Your function logic here
const result = await processData(data);
context.log(`Success: processed ${itemId}`);
} catch (error) {
context.error(`Error processing ${itemId}:`, error);
throw error; // Re-raise to trigger retry/dead-letter
}C# (.NET)
try
{
// Your function logic here
var result = await ProcessDataAsync(data);
_logger.LogInformation($"Success: processed {itemId}");
}
catch (Exception ex)
{
_logger.LogError(ex, $"Error processing {itemId}");
throw; // Re-raise to trigger retry/dead-letter
}Java
try {
// Your function logic here
Result result = processData(data);
context.getLogger().info("Success: processed " + itemId);
} catch (Exception e) {
context.getLogger().severe("Error processing " + itemId + ": " + e.getMessage());
throw e; // Re-raise to trigger retry/dead-letter
}PowerShell
try {
# Your function logic here
$result = Process-Data -Data $data
Write-Host "Success: processed $itemId"
}
catch {
Write-Error "Error processing $itemId : $_"
throw # Re-raise to trigger retry/dead-letter
}Key Principles
- Always log before throwing - Enables debugging from logs
- Re-throw exceptions - Allows Functions runtime to handle retry/dead-letter
- Include context in logs - Item ID, operation name, relevant metadata
- Use appropriate log levels - Info for success, Error for failures