LifeCycleHook
LifeCycleHook is a simple hook that logs each life-cycle stage of LiveView.
It is good for learning Phoenix LiveView life-cycle.
Overview
By mounting LifeCycleHook on LiveView with use LifeCycleHook, you can see logs for each life-cycle of LiveView.
defmodule MyApp.MyLive do
use Phoenix.LiveView
use LifeCycleHook
@impl true
def render(assigns) do
...
end
@impl true
def handle_event("click", params, socket) do
...
end
end[debug] MyApp.MyLive mount with HTTP
[debug] MyApp.MyLive handle_params with HTTP
[debug] MyApp.MyLive mount with WebSocket
[debug] MyApp.MyLive handle_params with WebSocket
[debug] MyApp.MyLive handle_event event: clickonly/except options
If you want to choose specific stages to log, you can use only or except option in use LifeCycleHook.
For example, you can set only: [:mount] option to use LifeCycleHook in sticky nested LiveView which doesn't support handle_params hook.
defmodule MyApp.MyStickyNestedLive do
use Phoenix.LiveView
use LifeCycleHook, only: [:mount]
@impl true
def render(assigns) do
...
end
end[debug] MyApp.MyStickyNestedLive mount with HTTP
[debug] MyApp.MyStickyNestedLive mount with WebSocketlog_level option
You can change log level of LifeCycleHook with log_level option.
defmodule MyApp.MyWarnLogLevelLive do
use Phoenix.LiveView
use LifeCycleHook, log_level: :warn
@impl true
def render(assigns) do
...
end
end[warning] MyApp.MyWarnLogLevelLive mount with HTTP
[warning] MyApp.MyWarnLogLevelLive mount with WebSocketInstallation
The package can be installed by adding :life_cycle_hook to your list of
dependencies in mix.exs:
def deps do
[
{:life_cycle_hook, "~> 0.7"}
]
endTO DO
-
Add
handle_paramshook -
Add macro that replace
on_mount({LifeCycleHook, __MODULE__}) -
Support nested LiveView with
sticky: trueoption -
Add
handle_eventhook -
Add
handle_infohook -
Support
only,exceptoptions inuse LifeCycleHook - Support setting log level
- Support watching params of each hook
- Support LiveComponent
-
Remove
Elixirprefix from module names in logs
Copyright and License
Copyright (c) 2022 Jinkyou Son (Json)
This work is free. You can redistribute it and/or modify it under the terms of the MIT License. See the LICENSE.md file for more details.