Skip to content

Commit 5c9e49f

Browse files
author
Artem Krivonos
committed
add _json_encoder variable, reduce frame types, upper case for log level
1 parent a752929 commit 5c9e49f

File tree

3 files changed

+20
-22
lines changed

3 files changed

+20
-22
lines changed

awslambdaric/bootstrap.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@
1717
JsonFormatter,
1818
_DATETIME_FORMAT,
1919
LogFormat,
20-
_FRAME_TYPES,
20+
_JSON_FRAME_TYPES,
2121
_DEFAULT_FRAME_TYPE,
2222
)
2323
from .lambda_runtime_marshaller import to_json
2424

2525
ERROR_LOG_LINE_TERMINATE = "\r"
2626
ERROR_LOG_IDENT = "\u00a0" # NO-BREAK SPACE U+00A0
2727
_AWS_LAMBDA_LOG_FORMAT = LogFormat.from_str(os.environ.get("AWS_LAMBDA_LOG_FORMAT"))
28-
_AWS_LAMBDA_LOG_LEVEL = os.environ.get("AWS_LAMBDA_LOG_LEVEL")
28+
_AWS_LAMBDA_LOG_LEVEL = os.environ.get("AWS_LAMBDA_LOG_LEVEL", "").upper()
2929

3030

3131
def _get_handler(handler):
@@ -107,7 +107,7 @@ def replace_line_indentation(line, indent_char, new_indent_char):
107107

108108

109109
if _AWS_LAMBDA_LOG_FORMAT == LogFormat.JSON:
110-
_ERROR_FRAME_TYPE = _FRAME_TYPES[(LogFormat.JSON, logging.ERROR)]
110+
_ERROR_FRAME_TYPE = _JSON_FRAME_TYPES[logging.ERROR]
111111

112112
def log_error(error_result, log_sink):
113113
error_result = {
@@ -421,7 +421,7 @@ def _setup_logging(log_format, log_level, log_sink):
421421
logger_handler.setFormatter(JsonFormatter())
422422

423423
logging.addLevelName(logging.DEBUG, "TRACE")
424-
if log_level:
424+
if log_level in logging._nameToLevel:
425425
logger.setLevel(log_level)
426426
else:
427427
logger_handler.setFormatter(

awslambdaric/lambda_runtime_log_utils.py

+12-18
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,18 @@ def from_str(cls, value: str):
4545
return cls.TEXT.value
4646

4747

48-
_FRAME_TYPES = {
49-
(LogFormat.JSON, logging.NOTSET): 0xA55A0002.to_bytes(4, "big"),
50-
(LogFormat.JSON, logging.DEBUG): 0xA55A000A.to_bytes(4, "big"),
51-
(LogFormat.JSON, logging.INFO): 0xA55A000E.to_bytes(4, "big"),
52-
(LogFormat.JSON, logging.WARNING): 0xA55A0012.to_bytes(4, "big"),
53-
(LogFormat.JSON, logging.ERROR): 0xA55A0016.to_bytes(4, "big"),
54-
(LogFormat.JSON, logging.CRITICAL): 0xA55A001A.to_bytes(4, "big"),
55-
(LogFormat.TEXT, logging.NOTSET): 0xA55A0003.to_bytes(4, "big"),
56-
(LogFormat.TEXT, logging.DEBUG): 0xA55A000B.to_bytes(4, "big"),
57-
(LogFormat.TEXT, logging.INFO): 0xA55A000F.to_bytes(4, "big"),
58-
(LogFormat.TEXT, logging.WARNING): 0xA55A0013.to_bytes(4, "big"),
59-
(LogFormat.TEXT, logging.ERROR): 0xA55A0017.to_bytes(4, "big"),
60-
(LogFormat.TEXT, logging.CRITICAL): 0xA55A001B.to_bytes(4, "big"),
48+
_JSON_FRAME_TYPES = {
49+
logging.NOTSET: 0xA55A0002.to_bytes(4, "big"),
50+
logging.DEBUG: 0xA55A000A.to_bytes(4, "big"),
51+
logging.INFO: 0xA55A000E.to_bytes(4, "big"),
52+
logging.WARNING: 0xA55A0012.to_bytes(4, "big"),
53+
logging.ERROR: 0xA55A0016.to_bytes(4, "big"),
54+
logging.CRITICAL: 0xA55A001A.to_bytes(4, "big"),
6155
}
62-
_DEFAULT_FRAME_TYPE = _FRAME_TYPES[(LogFormat.TEXT, logging.NOTSET)]
56+
_DEFAULT_FRAME_TYPE = 0xA55A0003.to_bytes(4, "big")
6357

64-
_encode_json = json.JSONEncoder(ensure_ascii=False).encode
58+
_json_encoder = json.JSONEncoder(ensure_ascii=False)
59+
_encode_json = _json_encoder.encode
6560

6661

6762
class JsonFormatter(logging.Formatter):
@@ -102,9 +97,8 @@ def format_log_level(record: logging.LogRecord):
10297

10398
def format(self, record: logging.LogRecord) -> str:
10499
self.format_log_level(record)
105-
record._frame_type = _FRAME_TYPES.get(
106-
(LogFormat.JSON, record.levelno),
107-
_FRAME_TYPES[(LogFormat.JSON, logging.NOTSET)],
100+
record._frame_type = _JSON_FRAME_TYPES.get(
101+
record.levelno, _JSON_FRAME_TYPES[logging.NOTSET]
108102
)
109103

110104
result = {

tests/test_bootstrap.py

+4
Original file line numberDiff line numberDiff line change
@@ -1179,12 +1179,16 @@ def test_log_level(self) -> None:
11791179
(LogFormat.JSON, "WARN", logging.WARNING),
11801180
(LogFormat.JSON, "ERROR", logging.ERROR),
11811181
(LogFormat.JSON, "FATAL", logging.CRITICAL),
1182+
# Log level is set only for Json format
11821183
(LogFormat.TEXT, "TRACE", logging.NOTSET),
11831184
(LogFormat.TEXT, "DEBUG", logging.NOTSET),
11841185
(LogFormat.TEXT, "INFO", logging.NOTSET),
11851186
(LogFormat.TEXT, "WARN", logging.NOTSET),
11861187
(LogFormat.TEXT, "ERROR", logging.NOTSET),
11871188
(LogFormat.TEXT, "FATAL", logging.NOTSET),
1189+
("Unknown format", "INFO", logging.NOTSET),
1190+
# if level is unknown fall back to default
1191+
(LogFormat.JSON, "Unknown level", logging.NOTSET),
11881192
]
11891193
for fmt, log_level, expected_level in test_cases:
11901194
with self.subTest():

0 commit comments

Comments
 (0)