Changelog

Improving AppSignal, one deploy at a time.

Jan 23, 2025

Organization-level notifier management

Organization admins can now manage notifiers at the organization level, simplifying application setup for organizations with multiple applications.

Key Updates

  • Centralized notifier management to streamline workflows across all applications.
  • Ability to set default notifiers for new applications and manage settings, scope, and events at the organizational level.

Availability

This feature is automatically enabled for new AppSignal customers and is being gradually rolled out to existing customers.

Interested in migrating to organization-level notifier management?

Existing customers can contact us to enable this feature and migrate their current notifiers. During migration, existing notifiers will be duplicated in the organization settings to ensure continuity, but no additional notifications will be sent as a result of this duplication.

Learn more

You can learn more about organization-level notifier management in our documentation.

Jan 20, 2025

Support Ownership gem and other improvements

Ruby4.3.3

Added

  • Add support for the Ownership gem, which is used to mark different segments of the application as owned by specific teams.

    The AppSignal sample will be tagged with the given owner:

    Ruby
    class OrdersController < ApplicationController owner :logistics # Transactions for requests handled by this controller will be tagged # in AppSignal with the "owner" tag set to "logistics" end

    If several owners are set within the same transaction, the last owner will take precedence. If an error is reported in the transaction, the owner tag will be set to the owner that was set when the error was raised.

    Set the ownership_set_namespace configuration option to true to also set the AppSignal sample's namespace to the owner. Note that doing so will cause existing performance and error incidents to be re-created with the new namespace.

    Set the instrument_ownership configuration option to false to disable the integration with the Ownership gem.

Changed

  • Do not report SystemExit errors from our Rake integration.
  • Do not report SignalException errors from our Rake integration.

Fixed

  • Fix deprecation warnings when building the AppSignal gem's native extension on Ruby 3.4, by porting the extension to use the TypedData API.

View the Ruby gem v4.3.3 changelog for more information.

Jan 13, 2025

Gravatar support

Added

  • You can now enable Gravatar avatars from your account settings.
Dec 31, 2024

Fix double newlines in broadcasted loggers

Ruby4.3.2

Fixed

  • Fix an issue where loggers, when broadcasted to by Appsignal::Logger#broadcast_to, would format again messages that have already been formatted by the broadcaster, causing the resulting message emitted by the logger to contain double newlines.

View the Ruby gem v4.3.2 changelog for more information.

Dec 20, 2024

Improve query sanitisation performance and other improvements

Python1.4.1

Added

  • Set the app revision config option for Scalingo deploys automatically. If the CONTAINER_VERSION system environment variable is present, it will use used to set the revision config option automatically. Overwrite it's value by configuring the revision config option for your application.

Fixed

  • Fix a performance issue when sanitising INSERT INTO ... VALUES queries.

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

Dec 20, 2024

Fix tagged logging support and add logger broadcasting

Ruby4.3.0

Added

  • Add logger broadcasting. This change implements an alternative within Appsignal::Logger to ActiveSupport::BroadcastLogger, following the same interface. This enables a proper workaround to the issues with ActiveSupport::BroadcastLogger ((#49745, #51883)) when used alongside tagged logging.

    For example, to use tagged logging both in logs emitted by the default Rails.logger and in logs sent to AppSignal, replace the Rails.logger with an AppSignal logger that broadcasts to the default Rails.logger:

    Ruby
    appsignal_logger = Appsignal::Logger.new("app") appsignal_logger.broadcast_to(Rails.logger) Rails.logger = ActiveSupport::TaggedLogging.new(appsignal_logger)

Removed

  • Remove tagged logging support from Appsignal::Logger.

    Tagged logging is still supported by wrapping an instance of Appsignal::Logger with ActiveSupport::TaggedLogging:

    Ruby
    appsignal_logger = Appsignal::Logger.new("rails") tagged_logger = ActiveSupport::TaggedLogging.new(appsignal_logger) Rails.logger = tagged_logger

    Removing this functionality allows for a workaround to issues within Rails (#49745, #51883), where using the broadcast logger to log to more than one tagged logger results in incorrect behaviour of the tagged logging methods, resulting in breakage throughout Rails' internals:

    Ruby
    # We use the built-in request ID middleware as an example that triggers # the issue: Rails.config.log_tags = [:request_id] appsignal_logger = Appsignal::Logger.new("rails") tagged_logger = ActiveSupport::TaggedLogging.new(appsignal_logger) # This does not work correctly, because the default `Rails.logger` is a # broadcast logger that is already broadcasting to a tagged logger. # When asked to broadcast to a second tagged logger, the return value of # `Rails.logger.tagged { ... }` will be incorrect, in turn causing the # `RequestID` middleware, which uses it internally, to return broken # Rack responses. Rails.logger.broadcast_to(tagged_logger)

    By reverting the changes to our logger so that it is no longer a tagged logger, we enable a workaround to this issue:

    Ruby
    Rails.config.log_tags = [:request_id] appsignal_logger = Appsignal::Logger.new("rails") # This works correctly, because `appsignal_logger` is not a tagged logger. # Note that `appsignal_logger` will not have the `request_id` tags. Rails.logger.broadcast_to(appsignal_logger)

Fixed

  • Fix #silence implementation for Appsignal::Logger.

View the Ruby gem v4.3.0 changelog for more information.

Dec 20, 2024

Fix ownership issue in Debian packages

Removed

  • Drop support for Debian Jessie and Debian Stretch for the stand-alone agent packages.

Fixed

  • Ensure adduser dependency is declared as such on the Debian package.

This fixes an issue in certain environments, such as in Ubuntu Noble container images, where the appsignal-agent user fails to be created during installation because the adduser and addgroup command-line utilities are not present by default.

  • Fix file ownership issue on stand-alone Debian packages. Ensure that the /etc/appsignal-agent.conf configuration file is owned by the appsignal-agent user.

  • Fix a performance issue when sanitising INSERT INTO ... VALUES queries.

This release can be installed through our standalone agent packages and as a Docker image.

Dec 16, 2024

Support Rails tagged logging and other improvements

Ruby4.2.2

Added

  • Support Rails/ActiveSupport tagged logging. When tags are set in apps using Rails.logger.tagged { ... } or with the Rails.application.config.log_tags = [...] config option, these tags are now included in the collected log messages.

    Ruby
    Rails.logger.tagged(["Tag 1", "Tag 2"]) { Rails.logger.info("My message") }

    Reports this log message:

    [Tag 1] [Tag 2] My message

Fixed

  • Fix a thread safety issue where sending check-in events simultaneously from different threads would cause several check-in schedulers to be initialised internally. This could cause some of the scheduled check-in events to never be sent to AppSignal when Appsignal.stop is called.

View the Ruby gem v4.2.2 changelog for more information.

Dec 12, 2024

App updates

Changed

  • Improve the way we show partial outages on the uptime monitor page.

Fixed

  • Visual updates to the invitation pages.
  • Fix long logbook notes breaking the layout.
Nov 28, 2024

App updates for November 2024

Fixed

  • Minor visual fix to address the truncation of id on the incident attributes page.
  • We've made the "Change password" flow clearer and more explicit.
Nov 28, 2024

Custom backtrace sanitization and other improvements

Added

  • Allow custom backtrace sanitization.

    Warning: This is an advanced feature meant for specific use cases. For most use cases, you should not need this functionality. If in doubt, leave matchBacktracePaths unset.

    Using matchBacktracePaths will cause public sourcemap detection to fail. If using matchBacktracePaths, use our private sourcemap API to upload sourcemaps to AppSignal.

    Some applications, such as those running on Electron or React Native environments, emit backtrace lines containing paths relative to the device in which the application is running.

    The unpredictability of these backtrace line paths interferes with the correct functioning of backtrace error grouping, and makes it impossible to upload sourcemaps for these files using our private sourcemap API, as it is not possible to know the expected path beforehand.

    You can set the matchBacktracePaths configuration to a list of one or more regexes, which will be used to attempt to match the relevant section of the backtrace line path.

    For example, suppose you have an Electron application, which your users install at unpredictable locations. Your backtrace line paths may look something like this, with the username changing for each installation:

    Shell
    /Users/${USERNAME}/Applications/CoolBeans.app/Contents/Resources/app/index.js

    To ignore these parts of the path that are not predictable, you can configure AppSignal to ignore everything before the app folder as follows:

    JavaScript
    const appsignal = new AppSignal({ matchBacktracePaths: [ new RegExp("CoolBeans\\.app/Contents/Resources/(.*)$") ] })

    If set, the matchBacktracePaths configuration option must contain a regular expression, or an array of one or more regular expressions, which attempt to match the whole backtrace line path. These regular expressions must have one or more match groups, such as (.*) in the example above, which attempt to match against the relevant segments of the backtrace line path.

    AppSignal will attempt to match the whole backtrace line path against these regular expressions in order. If any of the regular expression matches and produces a match group, AppSignal will replace the path in the backtrace line with the matched segment.

    Make sure your regular expressions provide unique and stable points of reference in the path, such as CoolBeans.app/Contents/Resources in the example above.

Fixed

  • Fix an issue when regexes with the g global flag are used on ignoreErrors. Before this change, after successfully matching on an error to ignore, if the following error would also match the same regular expression, the regular expression would then fail to match it.

View the @appsignal/javascript v1.5.0 changelog for more information.

Start your free trial

Don’t let the bad bugs bite. Try AppSignal for free.

AppSignal offers a 30-day free trial, no credit card is required. All features are available in all plans. Start monitoring your application in just a few clicks!