Skip to content

Commit 7a37df2

Browse files
authored
Merge pull request #62 from modern-python/39-use-orjson-for-log-json-serialization
use orjson to serialize logs
2 parents 8803679 + 1b8ed52 commit 7a37df2

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

lite_bootstrap/instruments/logging_instrument.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414

1515
if import_checker.is_structlog_installed:
16+
import orjson
1617
import structlog
1718

1819

@@ -80,6 +81,9 @@ def __call__(self, *args: typing.Any) -> logging.Logger: # noqa: ANN401
8081
logger.propagate = False
8182
return logger
8283

84+
def _serialize_log_with_orjson_to_string(value: typing.Any, **kwargs: typing.Any) -> str: # noqa: ANN401
85+
return orjson.dumps(value, **kwargs).decode()
86+
8387

8488
@dataclasses.dataclass(kw_only=True, frozen=True)
8589
class LoggingConfig(BaseConfig):
@@ -128,7 +132,7 @@ def _configure_structlog_loggers(self) -> None:
128132
structlog.stdlib.filter_by_level,
129133
*self.structlog_pre_chain_processors,
130134
*self.bootstrap_config.logging_extra_processors,
131-
structlog.processors.JSONRenderer(),
135+
structlog.processors.JSONRenderer(serializer=_serialize_log_with_orjson_to_string),
132136
],
133137
context_class=dict,
134138
logger_factory=MemoryLoggerFactory(

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ otl = [
4545
]
4646
logging = [
4747
"structlog",
48+
"orjson",
4849
]
4950
free-all = [
5051
"lite-bootstrap[sentry,otl,logging]",

0 commit comments

Comments
 (0)