Skip to content

Commit dff0c3c

Browse files
committed
feat(handler): add support to buffer logs from external libraries
1 parent c4434b7 commit dff0c3c

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
from __future__ import annotations
2+
3+
import logging
4+
from typing import TYPE_CHECKING
5+
6+
if TYPE_CHECKING:
7+
from aws_lambda_powertools.logging.buffer.cache import LoggerBufferCache
8+
from aws_lambda_powertools.logging.buffer.config import LoggerBufferConfig
9+
from aws_lambda_powertools.logging.logger import Logger
10+
11+
12+
class BufferingHandler(logging.Handler):
13+
"""
14+
Handler that buffers logs from external libraries using the source logger's buffer.
15+
16+
The handler intercepts log records from external libraries and
17+
stores them in the source logger's buffer using the same tracer_id mechanism.
18+
Logs are flushed when an error occurs or when explicitly requested.
19+
"""
20+
21+
def __init__(
22+
self,
23+
buffer_cache: LoggerBufferCache,
24+
buffer_config: LoggerBufferConfig,
25+
source_logger: Logger,
26+
):
27+
"""
28+
Initialize the BufferingHandler.
29+
30+
Parameters
31+
----------
32+
buffer_cache : LoggerBufferCache
33+
Shared buffer cache from the source logger
34+
buffer_config : LoggerBufferConfig
35+
Buffer configuration from the source logger
36+
source_logger : Logger
37+
The Powertools Logger instance to delegate buffering logic to
38+
"""
39+
super().__init__()
40+
self.buffer_cache = buffer_cache
41+
self.buffer_config = buffer_config
42+
self.source_logger = source_logger
43+
44+
def emit(self, record: logging.LogRecord) -> None:
45+
"""
46+
Buffer the log record by delegating to source logger's buffering logic.
47+
Call source logger to add a structured record to the buffer.
48+
49+
Parameters
50+
----------
51+
record : logging.LogRecord
52+
The log record from an external logger
53+
"""
54+
self.source_logger._add_log_record_to_buffer(
55+
level=record.levelno,
56+
msg=record.getMessage(),
57+
args=(),
58+
exc_info=record.exc_info,
59+
stack_info=False,
60+
)

0 commit comments

Comments
 (0)