Skip to content

Commit e02ac41

Browse files
author
Artem Krivonos
committed
Add LogFormat enum
1 parent b117fbc commit e02ac41

File tree

3 files changed

+35
-36
lines changed

3 files changed

+35
-36
lines changed

awslambdaric/bootstrap.py

+4-7
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,15 @@
1616
from .lambda_runtime_log_utils import (
1717
JsonFormatter,
1818
_DATETIME_FORMAT,
19-
_JSON_FORMAT,
19+
LogFormat,
2020
_FRAME_TYPES,
2121
_DEFAULT_FRAME_TYPE,
22-
_get_log_format_from_str,
2322
)
2423
from .lambda_runtime_marshaller import to_json
2524

2625
ERROR_LOG_LINE_TERMINATE = "\r"
2726
ERROR_LOG_IDENT = "\u00a0" # NO-BREAK SPACE U+00A0
28-
_AWS_LAMBDA_LOG_FORMAT = _get_log_format_from_str(
29-
os.environ.get("AWS_LAMBDA_LOG_FORMAT", "TEXT").upper()
30-
)
27+
_AWS_LAMBDA_LOG_FORMAT = LogFormat.from_str(os.environ.get("AWS_LAMBDA_LOG_FORMAT"))
3128
_AWS_LAMBDA_LOG_LEVEL = os.environ.get("AWS_LAMBDA_LOG_LEVEL")
3229

3330

@@ -109,7 +106,7 @@ def replace_line_indentation(line, indent_char, new_indent_char):
109106
return (new_indent_char * ident_chars_count) + line[ident_chars_count:]
110107

111108

112-
if _AWS_LAMBDA_LOG_FORMAT == _JSON_FORMAT:
109+
if _AWS_LAMBDA_LOG_FORMAT == LogFormat.JSON:
113110

114111
def log_error(error_result, log_sink):
115112
error_result = {
@@ -423,7 +420,7 @@ def setup_logging(log_format, log_level, log_sink):
423420
logging.Formatter.converter = time.gmtime
424421
logger = logging.getLogger()
425422
logger_handler = LambdaLoggerHandler(log_sink)
426-
if log_format == _JSON_FORMAT:
423+
if log_format == LogFormat.JSON:
427424
logger_handler.setFormatter(JsonFormatter())
428425
else:
429426
logger_handler.setFormatter(

awslambdaric/lambda_runtime_log_utils.py

+29-23
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import logging
66
import traceback
77
import json
8+
from enum import IntEnum
89

910
_DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
1011
_RESERVED_FIELDS = {
@@ -31,34 +32,39 @@
3132
"aws_request_id",
3233
"_frame_type",
3334
}
34-
_JSON_FORMAT = 0b0
35-
_TEXT_FORMAT = 0b1
35+
36+
37+
class LogFormat(IntEnum):
38+
JSON = 0b0
39+
TEXT = 0b1
40+
41+
@classmethod
42+
def from_str(cls, value: str):
43+
if value and value.upper() == "JSON":
44+
return cls.JSON.value
45+
return cls.TEXT.value
46+
47+
3648
_FRAME_TYPES = {
37-
(_JSON_FORMAT, logging.NOTSET): 0xA55A0002.to_bytes(4, "big"),
38-
(_JSON_FORMAT, logging.DEBUG): 0xA55A000A.to_bytes(4, "big"),
39-
(_JSON_FORMAT, logging.INFO): 0xA55A000E.to_bytes(4, "big"),
40-
(_JSON_FORMAT, logging.WARNING): 0xA55A0012.to_bytes(4, "big"),
41-
(_JSON_FORMAT, logging.ERROR): 0xA55A0016.to_bytes(4, "big"),
42-
(_JSON_FORMAT, logging.CRITICAL): 0xA55A001A.to_bytes(4, "big"),
43-
(_TEXT_FORMAT, logging.NOTSET): 0xA55A0003.to_bytes(4, "big"),
44-
(_TEXT_FORMAT, logging.DEBUG): 0xA55A000B.to_bytes(4, "big"),
45-
(_TEXT_FORMAT, logging.INFO): 0xA55A000F.to_bytes(4, "big"),
46-
(_TEXT_FORMAT, logging.WARNING): 0xA55A0013.to_bytes(4, "big"),
47-
(_TEXT_FORMAT, logging.ERROR): 0xA55A0017.to_bytes(4, "big"),
48-
(_TEXT_FORMAT, logging.CRITICAL): 0xA55A001B.to_bytes(4, "big"),
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"),
4961
}
50-
_DEFAULT_FRAME_TYPE = _FRAME_TYPES[(_TEXT_FORMAT, logging.NOTSET)]
62+
_DEFAULT_FRAME_TYPE = _FRAME_TYPES[(LogFormat.TEXT, logging.NOTSET)]
5163

5264

5365
_encode_json = json.JSONEncoder(ensure_ascii=False).encode
5466

5567

56-
def _get_log_format_from_str(value: str):
57-
if value == "JSON":
58-
return _JSON_FORMAT
59-
return _TEXT_FORMAT
60-
61-
6268
class JsonFormatter(logging.Formatter):
6369
def __init__(self):
6470
super().__init__(datefmt=_DATETIME_FORMAT)
@@ -98,8 +104,8 @@ def format_log_level(record: logging.LogRecord):
98104
def format(self, record: logging.LogRecord) -> str:
99105
self.format_log_level(record)
100106
record._frame_type = _FRAME_TYPES.get(
101-
(_JSON_FORMAT, record.levelno),
102-
_FRAME_TYPES[(_JSON_FORMAT, logging.NOTSET)],
107+
(LogFormat.JSON, record.levelno),
108+
_FRAME_TYPES[(LogFormat.JSON, logging.NOTSET)],
103109
)
104110

105111
result = {

tests/test_bootstrap.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,7 @@
1919
import awslambdaric.bootstrap as bootstrap
2020
from awslambdaric.lambda_runtime_exception import FaultException
2121
from awslambdaric.lambda_runtime_marshaller import LambdaMarshaller
22-
from awslambdaric.lambda_runtime_log_utils import (
23-
_JSON_FORMAT,
24-
_TEXT_FORMAT,
25-
_get_log_format_from_str,
26-
)
22+
from awslambdaric.lambda_runtime_log_utils import LogFormat
2723

2824

2925
class TestUpdateXrayEnv(unittest.TestCase):
@@ -1178,7 +1174,7 @@ class TestLogging(unittest.TestCase):
11781174
@classmethod
11791175
def setUpClass(cls) -> None:
11801176
bootstrap.setup_logging(
1181-
_get_log_format_from_str("JSON"), "INFO", bootstrap.StandardLogSink()
1177+
LogFormat.from_str("JSON"), "INFO", bootstrap.StandardLogSink()
11821178
)
11831179

11841180
@patch("sys.stderr", new_callable=StringIO)

0 commit comments

Comments
 (0)