There's always a question of what this setting would actually mean - should it affect logging from modules that belong to that application or should it affect logging from processes belonging to that application. If the later, it's already possible with a custom logger backend by leveraging the group leader mechanism and abusing OTP internals a little bit.
Each log has the pid of the originating process - using :application.get_application(pid) one can obtain the application where this process runs. The backend can dispatch the log based on the configuration and only log messages from some of the applications. Michał. On 7 Dec 2017, 20:01 +0100, Isaac Whitfield <[email protected]>, wrote: > This is based on previous conversation in > https://groups.google.com/d/msg/elixir-lang-core/C5-ixZVau3U/Gkb4PyOOAQAJ, > but this thread proposes an actual solution which I believe will benefit > everyone. > > The Logger in Elixir is widely used due to being in the standard library, but > misses out on a few key use cases that are familiar for developers coming > from other languages. For one, I believe it's time to add functionality to > suppress logs on a per-application basis. As the application is known to the > logging macros it can easily filter out at compile time. This can also be a > backwards-compatible option inside the Logger configuration to override the > default log level on a per application basis: > > > config :logger, :my_logger, > level: :info, > applications: [ > library1: :debug > ] > > > This allows developers to allow logs to be noisier for specific applications > (such as their own), without being swamped with noise from other > applications. The :applications key will just override the default level > provided in the :level key. If the :applications key is not ideal, we can > name it something else (:apps, :override, etc). We could even just combine > the two in :levels and use a :default for the default level. > > In addition to these changes, I propose that a new logging level be added > which is lower than the default log level of :debug, with the intent that all > developers log to this unless there is explicit reason to have their logs > seen by default. The combination of this and the above :applications key > allows developers to easily turn on logs from applications they're interested > in at the time. It allows the application developer to decide what is > important enough for another developer to see, rather than the developer > having to (typically) guess. I propose that this new logging level should be > named any of :trace, :verbose or :quiet (with :trace being preferred for > brevity/familiarity). > > There are many other languages which encourage this style of logging. Here > are a few I know of: > > - Node.js has the "debug" package, which is widely popular as it allows users > to opt-in to seeing logs from specific namespaces (which roughly translates > to OTP applications in our use case). > - Java has SLF4J which hides debug logs by default, allowing you to opt in on > package or class level (also hugely popular). > - Rust's official logging framework defaults to actually hiding all logging, > making you explicitly ask to see logs (of any kind). > > The interesting thing with the packages from Node.s/Java is that they're > libraries and not in the standard library; they evolved because of the > standard logging missing this stuff (although to be fair, Node.js only has > console). As the Logger is so widely used in Elixir, it feels that we're > already at the point where this should be supported. Making this an external > library in Elixir would be wasted effort as we would then have logging from > different sources with different behaviour, thus lowering the utility. I > think that including this support in Logger will make logging feel more > familiar to developers coming from the languages above, without making it > unfamiliar to (e.g.) Ruby developers where the behaviour matches what Elixir > currently has. > > I appreciate any support and/or suggestions with this. I feel strongly about > not having a "quiet" log level, as it causes a very painful balance for a > library developer when determining how verbose to be with logging. > > Thanks in advance for all replies, feel free to ask questions! > IW > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/606029ea-9855-44c6-ba94-69113ffed45c%40googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/a036472f-0808-475b-9301-35c3e1043682%40Spark. For more options, visit https://groups.google.com/d/optout.
