Prompt
======
There is a format/2 function in inspect/algebra.ex that
calls format/3 recursively that returns a list of binaries.
Instead of doing so, I want you to pass a binary as accumulator,
<<>>, and then instead of `[head | format(...)]`, on every
operation you will do `format(<<acc::binary, result::binary>>, ...)`.
Notes
=====
The assistant was able to detect an issue with `collapse/4`
but it was unable to fix it. That and the changes to
mix/tasks/format.ex were addressed manually.
* Log process label in :gen_event crash report
* Log process label in GenServer crash report
* Simplify existing tests
* Use inspect opts when inspecting label
Tasks were launched with proc_lib, which added
additional processing on boot. We removed the
proc_lib layer, which has the benefit of removing
the double logging (which only happened on tasks
but not any other behaviour).
We now fully integrate with Erlang/OTP logger.
* Logger.Formatter can now instantiate a compatible Erlamg/OTP logger formatter
* The default_handler configures the default handler
* The default_formatter configures the default formatter
* Backends front-end will be moved to logger_backends package,
but the implementation will still be shipped as part of Elixir
The `config_change` callback is called from `application_controller` process,
which is receiving env updates on releases. `Logger.configure` does a blocking
call to the `Logger` process, which calls `Application.put_env`
This causes a crash on logger config update.
The fix is to call `Logger.configure` only for the config that have not yet
been persisted.
When the logger report was in form of `%{label: term(), report: term()}`
the `report_cb` wasn't called and instead there was fall-back to the
"regular" formatter which could cause meaningless messages. This fixes
that by falling back to the "proper" `report_cb` in case when there was
no matching handler.