According to https://www.erlang.org/doc/man/logger#get_primary_config-0 and https://www.erlang.org/doc/man/logger#type-primary_config,
returned type for `:logger.get_primary_config` is:
```erlang
#{level => level() | all | none,
metadata => metadata(),
filter_default => log | stop,
filters => [{filter_id(), filter()}]}
```
Thus, inside `Logger.level/0` fun, `level` could also be `all` and `none` when calling:
```elixir
%{level: level} = :logger.get_primary_config()
```
* 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).
If the `:config` provided to `:default_handler` is
a keyword list, we will now convert it into a map
as expected by `:logger_std_h`, to support deep
`Config.config` keyword list merging.
Some metaprogramming was leading to `@doc since: "1.11.0"` being used
for all generated Logger macros. Instead, it should be present only for
"newer" Erlang levels (such as "notice" or "critical"), and not levels
such as "error" which were always present in Elixir.
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