An Web based Log Viewer for Elixir and Phoenix
- π Filtering logs with level and search word
- β© Realtime Update
- π Syntax Highlighted logs
- Phoenix 1.3 & 1.4 supported
mix.exs
def deps do
[
{:log_viewer, "~> 0.1.0", only: [:dev]}
]
end
Log Viewer is mainly focused on development purpose. So in production environment, please consider to using Log Management platform like AWS CloudWatch Logs, Papertrail and timber.
Add {LogViewer.Logger, []}
to your logger backends
config :logger,
backends: [{LogViewer.Logger, []}, :console]
then start your application and open http://localhost:5900
$ β iex -S mix
Erlang/OTP 21 [erts-10.1] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [hipe]
05:51:25.379 [info] Log Viewer started listening on http://localhost:5900
Interactive Elixir (1.7.4) - press Ctrl+C to exit (type h() ENTER for help)
then output logs by Logger
iex> require Logger
iex> Logger.info("foo")
iex> Logger.debug("foo")
iex> Logger.warn("foo")
iex> Logger.error("foo")
Basically Log Viewer can works as standalone elixir app.
But you can also integrate Log Viewer with Phoenix as well.
- Add route for Log Viewer
router.ex
scope "/" do
pipe_through(:browser)
get("/", MyAppWeb.PageController, :index)
end
# Route for Log Viewer
forward("/log_viewer", LogViewer.Router)
β Phoenix depends Cowboy HTTP server and Cowboy 2.0 had breaking change, so you must change configuration according to Phoenix and Cowboy version.
endpoint.ex
socket("/log_viewer", LogViewer.PhoenixSocket)
βοΈ This path MUST same with the path you defined in router.
This case is for if you have upgraded Phoenix 1.3 to 1.4 and still using cowboy 1.0
endpoint.ex
socket "/log_viewer", LogViewer.PhoenixSocket,
websocket: true,
longpoll: false
config/config.exs
Please CHANGE app name to your app name. (:my_app
, MyAppWeb
)
config :my_app, MyAppWeb.Endpoint,
http: [
dispatch: [
{:_,
[
{"/log_viewer/websocket", LogViewer.WebSocketHandler, []},
{:_, Phoenix.Endpoint.Cowboy2Handler, {MyAppWeb.Endpoint, []}}
]}
]
]
then start the phoenix and open http://localhost:4000/log_viewer in browser to view Log Viewer
If you are using phoenix integration and standalone server is not necessary, you can disable standalone server. Defaults to true
.
config/config.exs
config :log_viewer, standalone: false
If you want to change standalone server port. Defaults to 5900
.
config/config.exs
config :log_viewer, port: 4002
You can set log level. Defaults to :all
.
This config results to only info level log
config/config.exs
config :log_viewer, level: :info
Use inspect/2
with pretty: true
option will outputs pretty-printed logs
self() |> Process.info() |> inspect(pretty: true) |> Logger.info()
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
- Clone this repo
mix deps.get && iex -S mix
- Open another window to run nuxt.js
cd src && npm install && npm run dev
- Log Persistence
- Configurable Syntax Highlight theme
- Performance Improvement
MIT