From b4af5a0d398a35a191c0c7c246b5097174a928af Mon Sep 17 00:00:00 2001 From: Jonathan Ballet Date: Sat, 13 May 2023 18:35:24 +0200 Subject: [PATCH 1/2] Simplify interface Remove the not-so-useful StructLog class in favor of a simpler builder function --- README.md | 5 ++--- examples/cloud-function/main.py | 4 ++-- structlog_gcp/__init__.py | 6 +++++- structlog_gcp/base.py | 24 ++++++++++-------------- tests/conftest.py | 4 ++-- 5 files changed, 21 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 54b2179..2cd8f29 100644 --- a/README.md +++ b/README.md @@ -41,9 +41,8 @@ provides: import structlog import structlog_gcp -gcp_logs = structlog_gcp.StructlogGCP() - -structlog.configure(processors=gcp_logs.build_processors()) +processors = structlog_gcp.build_processors() +structlog.configure(processors=processors) ``` Then, you can use `structlog` as usual: diff --git a/examples/cloud-function/main.py b/examples/cloud-function/main.py index d1db36d..63f1c46 100644 --- a/examples/cloud-function/main.py +++ b/examples/cloud-function/main.py @@ -7,8 +7,8 @@ import structlog_gcp -gcp_logs = structlog_gcp.StructlogGCP() -structlog.configure(processors=gcp_logs.build_processors()) +processors = structlog_gcp.build_processors() +structlog.configure(processors=processors) @functions_framework.http diff --git a/structlog_gcp/__init__.py b/structlog_gcp/__init__.py index d9d758e..cfe6cd1 100644 --- a/structlog_gcp/__init__.py +++ b/structlog_gcp/__init__.py @@ -1 +1,5 @@ -from .base import StructlogGCP # noqa: F401 +from .base import build_processors # noqa: F401 + +__all__ = [ + "build_processors", +] diff --git a/structlog_gcp/base.py b/structlog_gcp/base.py index 43ada4e..73d9e19 100644 --- a/structlog_gcp/base.py +++ b/structlog_gcp/base.py @@ -3,19 +3,15 @@ from . import errors, processors -class StructlogGCP: - def __init__(self) -> None: - pass +def build_processors() -> list[Processor]: + procs = [] - def build_processors(self) -> list[Processor]: - procs = [] + procs.extend(processors.CoreCloudLogging().setup()) + procs.extend(processors.LogSeverity().setup()) + procs.extend(processors.CodeLocation().setup()) + procs.extend(errors.ReportException().setup()) + procs.extend(errors.ReportError(["CRITICAL"]).setup()) + procs.append(errors.add_service_context) + procs.extend(processors.FormatAsCloudLogging().setup()) - procs.extend(processors.CoreCloudLogging().setup()) - procs.extend(processors.LogSeverity().setup()) - procs.extend(processors.CodeLocation().setup()) - procs.extend(errors.ReportException().setup()) - procs.extend(errors.ReportError(["CRITICAL"]).setup()) - procs.append(errors.add_service_context) - procs.extend(processors.FormatAsCloudLogging().setup()) - - return procs + return procs diff --git a/tests/conftest.py b/tests/conftest.py index fb115ae..c8fffd9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -22,8 +22,8 @@ def logger(): "structlog.processors.format_exc_info", side_effect=fakes.format_exc_info ), ): - gcp_logs = structlog_gcp.StructlogGCP() - structlog.configure(processors=gcp_logs.build_processors()) + processors = structlog_gcp.build_processors() + structlog.configure(processors=processors) logger = structlog.get_logger() yield logger From c3f1f8caf6bda7b6f0c64ad033b5cf97010b7ff2 Mon Sep 17 00:00:00 2001 From: Jonathan Ballet Date: Sat, 13 May 2023 18:38:58 +0200 Subject: [PATCH 2/2] remove useless __call__ --- structlog_gcp/__init__.py | 2 +- structlog_gcp/errors.py | 8 ++------ structlog_gcp/processors.py | 16 +++++----------- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/structlog_gcp/__init__.py b/structlog_gcp/__init__.py index cfe6cd1..7cec2da 100644 --- a/structlog_gcp/__init__.py +++ b/structlog_gcp/__init__.py @@ -1,4 +1,4 @@ -from .base import build_processors # noqa: F401 +from .base import build_processors # noqa: F401 __all__ = [ "build_processors", diff --git a/structlog_gcp/errors.py b/structlog_gcp/errors.py index fe6c7d1..bd9d9c0 100644 --- a/structlog_gcp/errors.py +++ b/structlog_gcp/errors.py @@ -40,11 +40,7 @@ def __init__(self, log_level: str = "CRITICAL") -> None: self.log_level = log_level def setup(self) -> list[Processor]: - return [ - # structlog.processors.ExceptionRenderer(self.format_exception), - structlog.processors.format_exc_info, - self.__call__, - ] + return [structlog.processors.format_exc_info, self] def __call__( self, logger: WrappedLogger, method_name: str, event_dict: EventDict @@ -77,7 +73,7 @@ def __init__(self, severities: list[str]) -> None: self.severities = severities def setup(self) -> list[Processor]: - return [self.__call__] + return [self] def _build_service_context(self) -> dict[str, str]: # https://cloud.google.com/error-reporting/reference/rest/v1beta1/ServiceContext diff --git a/structlog_gcp/processors.py b/structlog_gcp/processors.py index 1ae310d..9586e8b 100644 --- a/structlog_gcp/processors.py +++ b/structlog_gcp/processors.py @@ -18,7 +18,7 @@ def setup(self) -> list[Processor]: structlog.processors.UnicodeDecoder(), # Add a timestamp in ISO 8601 format. structlog.processors.TimeStamper(fmt="iso"), - self.__call__, + self, ] def __call__( @@ -37,10 +37,7 @@ class FormatAsCloudLogging: """Finalize the Google Cloud Logging event message and replace the logging event""" def setup(self) -> list[Processor]: - return [ - self.__call__, - structlog.processors.JSONRenderer(), - ] + return [self, structlog.processors.JSONRenderer()] def __call__( self, logger: WrappedLogger, method_name: str, event_dict: EventDict @@ -74,11 +71,8 @@ def __init__(self) -> None: } def setup(self) -> list[Processor]: - return [ - # Add log level to event dict. - structlog.processors.add_log_level, - self.__call__, - ] + # Add log level to event dict. + return [structlog.processors.add_log_level, self] def __call__( self, logger: WrappedLogger, method_name: str, event_dict: EventDict @@ -108,7 +102,7 @@ def setup(self) -> list[Processor]: structlog.processors.CallsiteParameter.LINENO, ] ) - return [call_site_proc, self.__call__] + return [call_site_proc, self] def __call__( self, logger: WrappedLogger, method_name: str, event_dict: EventDict