Skip to content

Commit

Permalink
Fix issue with info log
Browse files Browse the repository at this point in the history
Ignore default phoenix log
Add some nice log example
  • Loading branch information
mrdotb committed Aug 27, 2024
1 parent 8ff2d06 commit 642bae6
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 11 deletions.
2 changes: 1 addition & 1 deletion config/dev.examples.exs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ config :disco_log,
enable_logger: true,
instrument_oban: true,
instrument_phoenix: true,
metadata: []
metadata: [:extra]

config :logger,
# backends: [],
Expand Down
61 changes: 57 additions & 4 deletions dev.exs
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,16 @@ defmodule DemoWeb.PageController do
<div><a href="/exception">Generate Exception</a></div>
<div><a href="/exit">Generate Exit</a></div>
<h3>Liveview</h3>
<div><a href="/liveview/mount_error">Generate LiveView mount error</a></div>
<div><a href="/liveview/multi_error/raise">Generate LiveView raise error</a></div>
<div><a href="/liveview/multi_error/throw">Generate LiveView throw error</a></div>
<h3>Logging example</h3>
<div><a href="/new_user">Generate a new user log</a></div>
<div><a href="/user_upgrade">Generate a pay plan log</a></div>
<div><a href="/extra">Generate a log with attachments</a></div>
<h3>Should not generate errors</h3>
<div><a href="/404">404 Not found</a></div>
""")
Expand All @@ -76,10 +80,55 @@ defmodule DemoWeb.PageController do
end
end

defmodule DemoWeb.LogController do
import Phoenix.Controller

require Logger

def init(opts), do: opts

def call(conn, :new_user) do
Logger.info("""
🎉 New User Registered!
✨ Username: Bob
📧 Email: [email protected]
""")

conn
|> redirect(to: "/")
end

def call(conn, :user_upgrade) do
Logger.info("""
🚀 Upgrade to a Paid Plan!
✨ Username: Bob
💼 Plan: Pro
""")

conn
|> redirect(to: "/")
end

def call(conn, :extra) do
Logger.info("""
✨ Extra Log !
📎 With attachments
""", extra: %{
username: "Bob",
id: 1,
and: "more",
stuff: "here"
})

conn
|> redirect(to: "/")
end
end

defmodule DemoWeb.MountErrorLive do
use Phoenix.LiveView

def mount(_params, _session, socket) do
def mount(_params, _session, _socket) do
:not_ok
end

Expand All @@ -101,11 +150,11 @@ defmodule DemoWeb.MultiErrorLive do
{:noreply, apply_action(socket, socket.assigns.live_action, params)}
end

defp apply_action(socket, :raise, _params) do
defp apply_action(_socket, :raise, _params) do
raise "Error raised in a live view"
end

defp apply_action(socket, :throw, _params) do
defp apply_action(_socket, :throw, _params) do
throw "Error throwed in a live view"
end

Expand Down Expand Up @@ -142,6 +191,10 @@ defmodule DemoWeb.Router do
get "/exception", DemoWeb.PageController, :exception
get "/exit", DemoWeb.PageController, :exit

get "/new_user", DemoWeb.LogController, :new_user
get "/user_upgrade", DemoWeb.LogController, :user_upgrade
get "/extra", DemoWeb.LogController, :extra

live "/liveview/mount_error", DemoWeb.MountErrorLive, :index
live "/liveview/multi_error/raise", DemoWeb.MultiErrorLive, :raise
live "/liveview/multi_error/throw", DemoWeb.MultiErrorLive, :throw
Expand Down
3 changes: 2 additions & 1 deletion lib/disco_log/application.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ defmodule DiscoLog.Application do
alias DiscoLog.Config
alias DiscoLog.Dedupe
alias DiscoLog.Integrations
alias DiscoLog.LoggerHandler
alias DiscoLog.Storage

def start(_type, _args) do
if Config.logger_enabled?() do
:logger.add_handler(:disco_log_handler, DiscoLog.LoggerHandler, %{})
:logger.add_handler(:disco_log_handler, LoggerHandler, %{})
end

if Config.instrument_phoenix?() do
Expand Down
4 changes: 4 additions & 0 deletions lib/disco_log/client.ex
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ defmodule DiscoLog.Client do
{:ok, error}
end

defp maybe_call_before_send({message, metadata}, nil) do
{:ok, {message, metadata}}
end

defp maybe_call_before_send(error, callback) do
if result = call_before_send(error, callback) do
{:ok, result}
Expand Down
4 changes: 0 additions & 4 deletions lib/disco_log/error.ex
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,6 @@ defmodule DiscoLog.Error do
{reason, "unknow"}
end

# defp normalize_exception(_reason, _) do
# {"unknow", "unknow"}
# end

# Fingerprint is used to group the similar errors together
# Original implementation from https://github.com/elixir-error-tracker/error-tracker/blob/main/lib/error_tracker/schemas/error.ex#L40
defp fingerprint(kind, source_line, source_function) do
Expand Down
6 changes: 5 additions & 1 deletion lib/disco_log/logger_handler.ex
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ defmodule DiscoLog.LoggerHandler do
excluded_domain?(Map.get(log_meta, :domain, []), config.excluded_domains) ->
:ok

log_level == :info and Map.get(log_meta, :application) == :phoenix ->
:ok

log_level == :info ->
log_info(log_event, config)

Expand All @@ -74,7 +77,8 @@ defmodule DiscoLog.LoggerHandler do
%LoggerHandler{} = config
) do
metadata = take_metadata(meta, config.metadata)
Client.log_info(unicode_chardata, metadata)
message = IO.iodata_to_binary(unicode_chardata)
Client.log_info(message, metadata)
:ok
end

Expand Down

0 comments on commit 642bae6

Please sign in to comment.