← Changelog

Improve logging support

Oct 02, 2026
Python1.9.0

Added

  • AppSignal warns when your application attaches the OpenTelemetry log handler from opentelemetry.sdk._logs, which is deprecated and is removed in a future release of the OpenTelemetry SDK. Its replacement is in opentelemetry.instrumentation.logging.handler.

Changed

  • A log message that is not a string, such as the dictionary in logger.info({"message": "Order placed", "order_id": 1234}), is sent as text by the logging instrumentation. Pass the structured values in the extra argument to send a structured log line:

    Python
    logger.info("Order placed", extra={"order_id": 1234})

    The OpenTelemetry logs API sends a structured log line from a dictionary body.

Removed

  • AppSignal for Python no longer supports Python 3.8 and 3.9, requiring Python 3.10 or newer.

Fixed

  • Ensure that data sent for check-ins, to an external collector, or via the agent always honors the http_proxy configuration option and the APPSIGNAL_HTTP_PROXY environment variable first, falling back to the HTTP_PROXY and HTTPS_PROXY environment variables if the configuration option is unset, and always ignores the NO_PROXY environment variable.

  • Fix local traffic to the AppSignal agent being incorrectly sent to an external proxy when the http_proxy configuration option is set in agent mode.

  • Improve handling of the extension internal queue when full.

  • Fix issues in the extension that lead to gaps in data reporting.

  • Logs are now still sent after your application configures the logging module. logging.config.dictConfig(), logging.config.fileConfig() and logging.basicConfig() keep AppSignal's log handler attached, so a configuration that sets its own handlers on the root logger, such as Django's LOGGING setting, will now send its logs to AppSignal as well.

    If you have manually added an OpenTelemetry log handler to your LOGGING setting or to the root logger elsewhere, it should now be removed, as AppSignal's handler will now send those log lines as well, causing them to be sent twice. AppSignal will log a warning when it detects a redundant OpenTelemetry handler.

  • When disable_default_instrumentations is used to disable the logging instrumentation, prevent the log lines emitted internally by AppSignal from propagating to a manually configured OpenTelemetry handler in the root logger.

  • logging.basicConfig() applies the log level it is given. An application that calls it with a level below WARNING, such as logging.INFO, starts sending its log lines at that level.

  • Fix an issue where AppSignal would configure redundant handlers when starting again in a forked process, such as when a Celery worker calls appsignal.start() from the worker_process_init signal.

View the Python package v1.9.0 changelog for more information.

$appsignal install

Make your next crash make sense.

Free for 30 days. No credit card. Two-minute install.