Packages
ex_esdb
0.7.7
0.11.0
0.10.0
0.9.0
0.8.0
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14-alpha
0.0.13-alpha
0.0.12-alpha
0.0.11-alpha
0.0.10-alpha
0.0.9-alpha
0.0.8-alpha
0.0.6-alpha
0.0.5-alpha
0.0.4-alpha
0.0.3-alpha
0.0.2-alfa
0.0.1-alfa
ExESDB is a reincarnation of rabbitmq/khepri, specialized for use as a BEAM-native event store.
Current section
Files
Jump to
Current section
Files
lib/ex_esdb/logging_system.ex
defmodule ExESDB.LoggingSystem do
@moduledoc """
LoggingSystem supervisor that manages individual logging workers for different ExESDB components.
This system replaces direct terminal output with PubSub-based logging events that can be
consumed by various logging workers and processed appropriately.
The system publishes logging events to the :ex_esdb_logging PubSub topic with the following structure:
```elixir
%{
component: :emitter_pool | :emitter_worker | :emitter_system,
event_type: :startup | :shutdown | :action | :health | :error,
store_id: atom(),
pid: pid(),
timestamp: DateTime.t(),
message: String.t(),
metadata: map()
}
```
"""
use Supervisor
require Logger
alias ExESDB.StoreNaming
def start_link(opts) do
store_id = StoreNaming.extract_store_id(opts)
name = StoreNaming.genserver_name(__MODULE__, store_id)
Supervisor.start_link(__MODULE__, opts, name: name)
end
def child_spec(opts) do
store_id = StoreNaming.extract_store_id(opts)
%{
id: StoreNaming.child_spec_id(__MODULE__, store_id),
start: {__MODULE__, :start_link, [opts]},
type: :supervisor,
restart: :permanent,
shutdown: 10_000
}
end
@impl Supervisor
def init(opts) do
store_id = StoreNaming.extract_store_id(opts)
children = [
# Emitter-specific logging workers
{ExESDB.EmitterSystemLoggingWorker, Keyword.put(opts, :store_id, store_id)},
{ExESDB.EmitterPoolLoggingWorker, Keyword.put(opts, :store_id, store_id)},
{ExESDB.EmitterWorkerLoggingWorker, Keyword.put(opts, :store_id, store_id)}
]
Logger.info("LoggingSystem started for store #{store_id}")
Supervisor.init(children, strategy: :one_for_one)
end
end