-
Notifications
You must be signed in to change notification settings - Fork 450
Closed
Labels
Description
Expected Behaviour
{"level":"INFO","location":"<module>:8","message":"スコビルデモ2","timestamp":"2023-12-08 15:21:28,502+0000","service":"service_undefined"}
スコビルデモ2
INFO:root:スコビルデモ2
Current Behaviour
{"level":"INFO","location":"<module>:8","message":"\u30b9\u30b3\u30d3\u30eb\u30c7\u30e2\uff12","timestamp":"2023-12-08 15:21:28,502+0000","service":"service_undefined"}
スコビルデモ2
INFO:root:スコビルデモ2
Code snippet
from aws_lambda_powertools import Logger
import logging
japanese_string = "\u30b9\u30b3\u30d3\u30eb\u30c7\u30e2\uff12"
logger = Logger()
logger.info(japanese_string)
print(japanese_string)
import logging
logging.basicConfig(level=logging.INFO)
logging.info(japanese_string)
Possible Solution
Use a custom formatter via Logger(logger_formatter=formatter)
- although I'd need to do some research as to what would be the correct formatter to fix this issue, it does seem e.g.
class LocalPlainFormatter(LambdaPowertoolsFormatter):
# pylint: disable = no-self-use, too-few-public-methods
"""Converts from the JSON structured data to a plain logging format"""
def serialize(self, log: dict[Any, Any]) -> str:
"""Converts from the JSON structured data to a plain logging format.
:param log: A JSON log record.
:return: Plan logging format version of the input `log`.
"""
timestamp = log["timestamp"]
levelname = log["level"]
func_name_location = log["location"]
message = log["message"]
exception_name = log.get("exception_name", "")
traceback = log.get("exception", "")
local_context = log.get("local_context", "")
if exception_name or traceback:
exception_info = f" - {exception_name} - {traceback}"
else:
exception_info = ""
return f"{levelname} — {timestamp} — {func_name_location} — {message}{local_context}" \
f"{exception_info}"
Can work around this issue, at the expense of losing the structured logging
I also tried
def myserializer(x):
return json.dumps(x, ensure_ascii=False)
logger = Logger(json_serializer=myserial)
Which I thought might be the issue, but it seems no matter what I pass to json_serializer
I get the same output
Steps to Reproduce
- aws_lambda_powertools-2.29.0
- python 3.11
Powertools for AWS Lambda (Python) version
latest
AWS Lambda function runtime
3.10
Packaging format used
Lambda Layers
Debugging logs
No response
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Shipped