Changelog

v0.10.0 - 2025-07-05

Enhanced

Improved Logging Filter Documentation and Usage

  • Enhanced Examples: Updated filtering examples for better ExESDB integration patterns
  • Multi-Layer Filtering: Documented comprehensive filtering strategies combining application-level config with runtime filters
  • Production Patterns: Added production-ready configurations for distributed applications using Swarm and LibCluster
  • ExESDB Integration: Documented how BCUtils.LoggerFilters integrates with ExESDB's consensus layer logging

Technical Improvements

  • Better Module Detection: Enhanced is_swarm_module?/1 and is_libcluster_module?/1 for more reliable filtering
  • Metadata Handling: Improved handling of log events without MFA metadata
  • Performance: Optimized filter functions for minimal runtime overhead

Documentation

  • Updated Guide: Enhanced "Filtering Swarm Logs" guide with ExESDB-specific patterns
  • Usage Examples: Added comprehensive examples for distributed event store applications
  • Best Practices: Documented environment-specific filtering strategies (dev/test/prod)

Benefits for ExESDB Users

  • Cleaner Logs: Significant reduction in Swarm and LibCluster noise during cluster formation
  • Better Debugging: Focus on application logic instead of clustering protocol chatter
  • Production Ready: Minimal logging overhead while preserving error visibility
  • Consensus Layer Ready: Works seamlessly with Ra/Khepri-based applications like ExESDB

Usage with ExESDB

# In ExESDB config - BCUtils filters work alongside ExESDB's own filters
config :logger, :console,
  level: :info,
  filters: [
    # BCUtils filters for clustering libraries
    swarm_noise: {BCUtils.LoggerFilters, :filter_swarm},
    libcluster_noise: {BCUtils.LoggerFilters, :filter_libcluster},
    # ExESDB's own filters for consensus libraries (defined in ExESDB.LoggerFilters)
    ra_noise: {ExESDB.LoggerFilters, :filter_ra},
    khepri_noise: {ExESDB.LoggerFilters, :filter_khepri}
  ]

v0.9.0 - 2025-07-05

Fixed

Enhanced Swarm Logging Filters

  • BCUtils.LoggerFilters: Fixed filter_swarm/1 to properly handle Swarm.Logger module
  • Added explicit handling for Swarm.Logger in addition to other Swarm modules
  • Updated compile-time purging configurations to include Swarm.Logger
  • Resolves issue where Swarm info/debug/warning messages were still appearing despite filtering

Technical Details

  • The Swarm.Logger module was generating logs that weren't caught by the original Elixir.Swarm* pattern matching
  • Added specific check: module == Swarm.Logger to the is_swarm_module?/1 function
  • Updated both ExESDB Server and Gateway configurations to include [module: Swarm.Logger, level_lower_than: :error]

v0.8.0 - 2025-07-05

Added

Phoenix.PubSub Conflict Resolution

  • BCUtils.PubSubManager: New module to handle Phoenix.PubSub conflicts when multiple applications try to start the same PubSub instance
  • Added maybe_child_spec/2 for conditional PubSub startup in supervision trees
  • Added already_started?/1, ensure_started/2, health_check/1, and list_running/0 utilities
  • Added phoenix_pubsub ~> 2.1 as optional dependency
  • Documentation: New guide "Resolving Phoenix.PubSub Conflicts" with comprehensive usage examples

Swarm Logging Noise Reduction

  • BCUtils.LoggerFilters: New module with pre-configured filters to reduce logging noise from verbose libraries
  • Added filter_swarm/1 to filter out non-error Swarm messages
  • Added filter_libcluster/1 for LibCluster noise reduction
  • Added filter_verbose_libs/1 as combined filter for multiple noisy libraries
  • Added errors_and_warnings_only/1 for aggressive filtering
  • Documentation: New guide "Filtering Swarm Logs" with multi-layer filtering strategies

Benefits

  • Eliminates Conflicts: No more :already_started errors when multiple apps use Phoenix.PubSub
  • Resource Efficient: Single PubSub instance shared across applications
  • Cleaner Logs: Significant reduction in Swarm logging noise while preserving error visibility
  • Production Ready: Minimal performance impact with comprehensive error handling
  • Reusable: Available to all BEAM Campus projects via bc_utils

Usage Examples

PubSub Conflict Resolution

# In supervision tree - automatically handles conflicts
children = [
  BCUtils.PubSubManager.maybe_child_spec(:my_pubsub),
  # other children...
]
|> Enum.filter(& &1)  # Remove nil entries

Swarm Log Filtering

# In config/dev.exs - only show Swarm errors
config :logger, :console,
  filters: [swarm_noise: {BCUtils.LoggerFilters, :filter_swarm}]

v0.1.0

  • Initial release
  • introduced BCUtils.Banner