# Changelog
## 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
```elixir
# 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
```elixir
# 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