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 filtersconfig:logger,:console,level::info,filters:[# BCUtils filters for clustering librariesswarm_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 conflictschildren=[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 errorsconfig:logger,:console,filters:[swarm_noise:{BCUtils.LoggerFilters,:filter_swarm}]