def test_with_json_message(root_logger, stdout): logger = Logger(stream=stdout) msg = {"x": "isx"} logger.info(json.dumps(msg)) log_dict = json.loads(stdout.getvalue()) assert msg == log_dict["message"]
def test_with_dict_message(root_logger, stdout): logger = Logger(level="DEBUG", stream=stdout) msg = {"x": "isx"} logger.critical(msg) log_dict = json.loads(stdout.getvalue()) assert msg == log_dict["message"]
def test_with_unserialisable_value_in_message(root_logger, stdout): logger = Logger(level="DEBUG", stream=stdout) class X: pass msg = {"x": X()} logger.debug(msg) log_dict = json.loads(stdout.getvalue()) assert log_dict["message"]["x"].startswith("<")
def test_logging_exception_traceback(root_logger, stdout): logger = Logger(level="DEBUG", stream=stdout, request_id="request id!", another="value") try: raise Exception("Boom") except Exception: logger.exception("This is a test") log_dict = json.loads(stdout.getvalue()) check_log_dict(log_dict) assert "exception" in log_dict
def test_setup_with_valid_log_levels(root_logger, stdout, level): logger = Logger(level=level, stream=stdout, request_id="request id!", another="value") msg = "This is a test" log_command = { "INFO": logger.info, "ERROR": logger.error, "WARNING": logger.warning, "DEBUG": logger.debug, "CRITICAL": logger.critical, } log_message = log_command[level] log_message(msg) log_dict = json.loads(stdout.getvalue().strip()) check_log_dict(log_dict) assert level == log_dict["level"] assert "This is a test" == log_dict["message"] assert "request id!" == log_dict["request_id"] assert "exception" not in log_dict
OnModified Function """ import os import boto3 import requests from aws_lambda_powertools.tracing import Tracer # pylint: disable=import-error from aws_lambda_powertools.logging.logger import Logger # pylint: disable=import-error API_URL = os.environ["API_URL"] ENVIRONMENT = os.environ["ENVIRONMENT"] TABLE_NAME = os.environ["TABLE_NAME"] dynamodb = boto3.resource("dynamodb") # pylint: disable=invalid-name table = dynamodb.Table(TABLE_NAME) # pylint: disable=invalid-name,no-member logger = Logger() # pylint: disable=invalid-name tracer = Tracer() # pylint: disable=invalid-name @tracer.capture_method def get_payment_token(order_id: str) -> str: """ Retrieve the paymentToken from DynamoDB """ response = table.get_item(Key={"orderId": order_id}) return response["Item"]["paymentToken"] @tracer.capture_method
from aws_lambda_powertools.logging.logger import Logger from aws_lambda_powertools.metrics import MetricUnit from aws_lambda_powertools.utilities.data_classes import APIGatewayProxyEventV2 from aws_lambda_powertools.utilities.typing import LambdaContext from modulestf.cloudcraft.graph import populate_graph from modulestf.const import FINAL_DIR from modulestf.convert import convert_graph_to_modulestf_config from modulestf.logger import setup_logging from modulestf.render import prepare_render_dirs, render_from_modulestf_config from modulestf.upload import upload_file_to_s3 # logger = setup_logging() os.environ["POWERTOOLS_TRACE_DISABLED"] = "1" logger = Logger(service="modulestf-d2c") tracer = Tracer(service="modulestf-d2c") metrics = Metrics(namespace="modulestf-d2c", service="modulestf-d2c") def load_data(event): body = event.body logger.info(f"body = {body}") qs = event.query_string_parameters logger.info("queryStringParameters = %s" % qs) if body is None and qs is None: raise ValueError( "Some query string parameters should be defined or use HTTP POST method", 400)
def test_setup_with_bad_level_does_not_fail(): Logger("DBGG", request_id="request id!", another="value")
def test_setup_with_invalid_log_level(root_logger, logger, stdout): with pytest.raises(ValueError) as e: Logger(level="not a valid log level") assert "Unknown level" in e.value.args[0]