本番環境でシステムを診断するメカニズムを持つことが目的である場合、永続的または一時的に 1 つまたは複数のイベント ハンドラーに接続できる gen_event サーバーを使用できると思います。欠点は、現在のコードでイベントを生成する必要があることです。

アプリケーションのプロファイリング/分析が目的の場合は、observer、pman などの既存のツールを検討する必要があります。
編集:
gen_event の重要な点は、複数のイベント ハンドラーをオンデマンドで接続できる既成の動作であることです。
pman を使用すると、送信されたすべてのメッセージ、メッセージの受信、およびプロセスの関数呼び出しを確認できます。デフォルトでは次のように指定されています。タイムスタンプなどの他の情報を追加できるかどうか、およびフィルタリングできるかどうかは確認していません。
...
<0.60.0>: call erlang:spawn_link(erlang, apply, [#Fun<util.3.13553350>,[]])
{trace,<0.60.0>,spawn,<0.180.0>,{erlang,apply,[#Fun<util.3.13553350>,[]]}}
<0.60.0>: link <0.180.0>
<0.60.0>: call erlang:now()
<0.60.0>: call gen_event:notify(plc1, {store, t5_plc1, running, 1360156073108})
<0.60.0>: call gen_event:send(plc1, {notify, {store, t5_plc1, running, 1360156073108}})
<0.60.0>: ! To: plc1 Msg: {notify, {store, t5_plc1, running, 1360156073108}}
<0.60.0>: call erlang:setelement(12, {state, t5_plc1, #Fun<testmngr.9.27375888>, #Fun<testmngr.10.27375888>, 46, forever, 0, 1, run, undefined, undefined, <0.179.0>, plc1}, <0.180.0>)
<0.180.0>: call erlang:apply(#Fun<util.3.13553350>, [])
<0.180.0>: rec timeout
<0.180.0>: call gen_server:cast(manager_plc1, {complete, t5_plc1})
<0.180.0>: call gen_server:do_cast(manager_plc1, {complete, t5_plc1})
<0.180.0>: call gen_server:cast_msg({complete, t5_plc1})
<0.180.0>: call gen_server:do_send(manager_plc1, {'$gen_cast', {complete, t5_plc1}})
<0.180.0>: call erlang:send(manager_plc1, {'$gen_cast', {complete, t5_plc1}}, [noconnect])
<0.180.0>: ! To: manager_plc1 Msg: {'$gen_cast', {complete, t5_plc1}}
<0.180.0>: ! To: <0.60.0> Msg: {'$gen_event', {complete, 47}}
<0.60.0>: rec {'$gen_event', {complete, 47}}
<0.180.0>: exit normal
<0.60.0>: getting_unlinked <0.180.0>
...