Skip to content

Reference

opensearch_log

A Python logging handler for efficient and reliable direct log transmission to OpenSearch.

Attributes

opensearch_log.urllib3_logger module-attribute

urllib3_logger = getLogger('opensearch')

Classes

opensearch_log.Logging

Context manager to add fields to log records.

Attributes
opensearch_log.Logging.added_fields instance-attribute
added_fields: list[str] = []
opensearch_log.Logging.values instance-attribute
values = values

Functions

opensearch_log.add_log_fields

add_log_fields(**values: Any) -> list[str]

Include fields to all log records.

opensearch_log.log_fields

log_fields(func: Optional[Any] = None, **values: Any) -> Any

Decorate to include fields values to all log records.

opensearch_log.remove_log_fields

remove_log_fields(*fields: str) -> None

Remove logged fields.

Modules

opensearch_log.base_handler

Base logger for structured logging.

Classes
opensearch_log.base_handler.BaseHandler

Bases: Handler

Abstract base handler for structured logging.

Functions
opensearch_log.base_handler.BaseHandler.emit
emit(record: LogRecord) -> None

Emit a logging record in a processed format.

opensearch_log.base_handler.BaseHandler.send_message
send_message(message: Optional[str], record: LogRecord) -> None

Send the log message. This method should be implemented by subclasses.

opensearch_log.cloudwatch_handler

Structured logger that sends logs to AWS CloudWatch.

Attributes
opensearch_log.cloudwatch_handler.BUFFER_SIZE module-attribute
BUFFER_SIZE = 100
opensearch_log.cloudwatch_handler.FLUSH_SECONDS module-attribute
FLUSH_SECONDS = 3.0
opensearch_log.cloudwatch_handler.RETRY_NUM module-attribute
RETRY_NUM = 3
Classes
opensearch_log.cloudwatch_handler.CloudwatchHandler

Bases: BaseHandler

Handler that sends log records to AWS CloudWatch.

Attributes
opensearch_log.cloudwatch_handler.CloudwatchHandler.buffer_size instance-attribute
buffer_size = BUFFER_SIZE
opensearch_log.cloudwatch_handler.CloudwatchHandler.flush_seconds instance-attribute
flush_seconds = FLUSH_SECONDS
opensearch_log.cloudwatch_handler.CloudwatchHandler.log_client property
log_client: client

Get the boto3 client for CloudWatch logs.

opensearch_log.cloudwatch_handler.CloudwatchHandler.log_group instance-attribute
log_group = log_group
opensearch_log.cloudwatch_handler.CloudwatchHandler.log_stream instance-attribute
log_stream = log_stream
Functions
opensearch_log.cloudwatch_handler.CloudwatchHandler.close
close() -> None

Flush the buffer and release any outstanding resource.

opensearch_log.cloudwatch_handler.CloudwatchHandler.flush
flush() -> None

Flush the buffer to CloudWatch.

Could run from Timer's thread or from the main thread. So we should not use json_formatter's routines that access ThreadLocal variables.

opensearch_log.cloudwatch_handler.CloudwatchHandler.send_message
send_message(message: Optional[str], record: LogRecord) -> None

Buffer the log message and flush if necessary.

Functions
opensearch_log.cloudwatch_handler.get_logger
get_logger(*args: Any, echo_stdout: bool = False, log_group: str, log_stream: str, log_handler: Optional[BaseHandler] = None, **kwargs: Any) -> Logger

Create a logger that stream logs to CloudWatch.

Modules

opensearch_log.json_log

JSON logging.

Classes
opensearch_log.json_log.Logging

Context manager to add fields to log records.

Attributes
opensearch_log.json_log.Logging.added_fields instance-attribute
added_fields: list[str] = []
opensearch_log.json_log.Logging.values instance-attribute
values = values
Functions
opensearch_log.json_log.add_log_fields
add_log_fields(**values: Any) -> list[str]

Include fields to all log records.

opensearch_log.json_log.create_logger
create_logger(log_handler_instance: BaseHandler, level: int, clear_handlers: bool = False) -> Logger

Create a logger that stream logs in JSON format with additional fields.

opensearch_log.json_log.get_json_formatter
get_json_formatter() -> JsonFormatter

Get a JSON formatter.

opensearch_log.json_log.get_logger
get_logger(application: Optional[str] = sys.argv[0], *, log_handler: BaseHandler, level: int = logging.INFO, clear_handlers: bool = False, **values: Any) -> Logger

Get a JSON logger.

opensearch_log.json_log.log_fields
log_fields(func: Optional[Any] = None, **values: Any) -> Any

Decorate to include fields values to all log records.

opensearch_log.json_log.remove_handlers
remove_handlers(_logger: Logger) -> None

Remove any default handlers.

opensearch_log.json_log.remove_log_fields
remove_log_fields(*fields: str) -> None

Remove logged fields.

opensearch_log.json_log.replace_logger_fields
replace_logger_fields(fields_to_log: dict[str, Any]) -> None

Update logger with new fields to log.

opensearch_log.json_log.set_record_factory
set_record_factory() -> None

Set a log record factory.

opensearch_log.opensearch_handler

Structured logger that sends logs to AWS OpenSearch.

Attributes
opensearch_log.opensearch_handler.BUFFER_SIZE module-attribute
BUFFER_SIZE = 200
opensearch_log.opensearch_handler.BULK_SIZE module-attribute
BULK_SIZE = 15
opensearch_log.opensearch_handler.DEFAULT_INDEX_NAME module-attribute
DEFAULT_INDEX_NAME = 'myindex'
opensearch_log.opensearch_handler.DEFAULT_OPENSEARCH_HOST module-attribute
DEFAULT_OPENSEARCH_HOST = 'localhost'
opensearch_log.opensearch_handler.FLUSH_SECONDS module-attribute
FLUSH_SECONDS = 0.8
opensearch_log.opensearch_handler.IGNORED_LOG_RECORD_FIELDS module-attribute
IGNORED_LOG_RECORD_FIELDS = ['args', 'levelno', 'pathname', 'relativeCreated', 'msecs', 'exc_text']
opensearch_log.opensearch_handler.INDEX_DATE_FORMAT module-attribute
INDEX_DATE_FORMAT = '%Y.%m.%d'
opensearch_log.opensearch_handler.RETRY_NUM module-attribute
RETRY_NUM = 3
opensearch_log.opensearch_handler.logger module-attribute
logger = get_logger(echo_stdout=True)
Classes
opensearch_log.opensearch_handler.IndexRotation

Bases: Enum

Index rotation frequency.

Attributes
opensearch_log.opensearch_handler.IndexRotation.DAILY class-attribute instance-attribute
DAILY = 0
opensearch_log.opensearch_handler.IndexRotation.MONTHLY class-attribute instance-attribute
MONTHLY = 10
opensearch_log.opensearch_handler.OpensearchHandler

Bases: BaseHandler

Handler to send log records to AWS OpenSearch.

Attributes
opensearch_log.opensearch_handler.OpensearchHandler.DAILY class-attribute instance-attribute
DAILY = DAILY
opensearch_log.opensearch_handler.OpensearchHandler.MONTHLY class-attribute instance-attribute
MONTHLY = MONTHLY
opensearch_log.opensearch_handler.OpensearchHandler.buffer_size instance-attribute
buffer_size = buffer_size
opensearch_log.opensearch_handler.OpensearchHandler.flush_seconds instance-attribute
flush_seconds = flush_seconds
opensearch_log.opensearch_handler.OpensearchHandler.index_name instance-attribute
index_name = index_name
opensearch_log.opensearch_handler.OpensearchHandler.index_rotate instance-attribute
index_rotate = IndexRotation[index_rotate]
opensearch_log.opensearch_handler.OpensearchHandler.opensearch_host instance-attribute
opensearch_host = opensearch_host
Functions
opensearch_log.opensearch_handler.OpensearchHandler.close
close() -> None

Flush the buffer on close.

opensearch_log.opensearch_handler.OpensearchHandler.emit
emit(record: LogRecord) -> None

Emit a logging record in a processed format.

opensearch_log.opensearch_handler.OpensearchHandler.flush
flush() -> None

Flush the buffer.

opensearch_log.opensearch_handler.OpensearchHandler.is_connected
is_connected() -> bool

Return True if we can ping the OpenSearch.

opensearch_log.opensearch_handler.OpensearchHandler.send_message
send_message(message: Optional[str], record: LogRecord) -> None

Send the log message to OpenSearch.

Functions
opensearch_log.opensearch_handler.get_logger
get_logger(*args: Any, opensearch_host: str = DEFAULT_OPENSEARCH_HOST, index_name: str = DEFAULT_INDEX_NAME, index_rotate: Union[IndexRotation, str] = IndexRotation.DAILY, echo_stdout: bool = False, buffer_size: int = BUFFER_SIZE, flush_seconds: float = FLUSH_SECONDS, log_handler: Optional[BaseHandler] = None, **kwargs: Any) -> Logger

Create a logger that stream logs to OpenSearch.

opensearch_log.opensearch_handler.restore_logger
restore_logger() -> None

Flush and remove all handlers.

Modules

opensearch_log.opensearch_serializer

JSON serializer.

Classes
opensearch_log.opensearch_serializer.OpenSearchSerializer

Bases: JSONSerializer

Override OpenSearch JSON serializer.

Ignore serialization errors.

Functions
opensearch_log.opensearch_serializer.OpenSearchSerializer.default
default(data: Any) -> Any

Catch all serialization fails and fall to str.

opensearch_log.stdout_handler

JSON logging to stdout.

Classes
opensearch_log.stdout_handler.StdoutHandler

Bases: BaseHandler

Handler to send json log to stdout.

Functions
opensearch_log.stdout_handler.StdoutHandler.send_message
send_message(message: Optional[str], record: LogRecord) -> None

Send the log message to stdout.

Functions
opensearch_log.stdout_handler.add_stdout_json_handler
add_stdout_json_handler(logger: Logger) -> None

Add a stdout handler to the logger.

opensearch_log.stdout_handler.get_logger
get_logger(application: Optional[str] = None, branch: Optional[str] = None, *, level: int = logging.INFO, clear_handlers: bool = False, **values: Any) -> Logger

Get a logger to send JSON logs to stdout.

Modules