I was today years old when I learned to use Logger.notice
instead of IO.inspect everywhere that I wanted to peek at what was going on with the state of my application. Maybe dialyzer or mix could suggest that instead of just warning “There should be no calls to inspect.”
Credo has such warning.
Logger.notice
compared to IO.inspect
is configurable, you have log levels and you can disable logs altogether. You don’t want to have random inspects in your production code.
I don’t think the two are equivalent… both are fruit, but apples and oranges?
notice
indicates the severity of the message logged – if you have a logging threshold of info, for example, debug messages won’t show up but notices will. The syslog protocol defines the available severities with numerical codes (see section 6.2.1 table 2 on page 11). A “notice” is described as “normal but significant condition” and it lives right between “info” and “warning”.
I’m not an expert on this, but Logger sends messages buffered to specific targets whereas IO.inspect
is pegged to STDOUT
. Sometimes I have to remember this e.g. if I start a process in one iex
session and when I join it via another Terminal window. IO.inspect
may be visible in one and not the other.
Very much this. IO.inspect
is the printf
of elixir, while Logger
is a means of logging to configurable backends with multiple capabilities besides raw string logs, …. The stuff you’d pull in a library for in many languages.
Thanks for the explanations. I understand they are not equivalent to or exclusionary of one another. I just was ONLY using IO.inspect even in situations that Logger seems much more fitting now that I know about it.
You might find this library useful to inspect using Logger: untangle | Hex