> Should we stop using a global logger? Yes[1]
1. https://dave.cheney.net/2017/01/26/context-is-for-cancelation On Friday, 25 August 2017 13:38:48 UTC+10, buchan...@gmail.com wrote: > > In Funnel [1], we've been using a global logger, based on logrus [2]. This > has worked fine through the early stages of the project, but it's starting > to show a few cracks. In particular, we need to ensure that a request > (task) ID is present in all log messages. Solutions to this have grown to > be inconsistent: > > - We create a child logger instance which has the ID preconfigured, and > pass that to some function calls. [3] > - We're looking at passing a context to logging calls, and the logger > pulls the ID from context.Value. [4] > - Some calls have been left behind and are still using the global logger. > > Other notes: > - A global logger configured to a single task ID won't work, since > multiple requests may be handled concurrently. > - Request handling spans multiple packages. > - We're using context extensively, we're ok with using it more. > > We're trying to decide whether to stick to a global (singleton) logger, or > remove the global logger completely and start passing logger instances > everywhere. I think we can make either work, and so far neither is an > obvious choice. What do you think? > > Global logger: > - seems to be the most common approach > - convenient access > - global singleton might lead to difficulty and inflexibility, e.g. > capturing logging in tests, multiple configurations > > Logger instances: > - more fields on every type and function that wants to log > - full control over logging in each individual type and function > - clearly stated dependencies for each type/function. I'd say Go idioms > tend toward obvious, clear, and powerful over clean, concise, magic. > > A third, interesting option might be to add all logging configuration to > the context using context.Value, including output, formatting, etc. Global > logging functions would pull all needed config from the context. I'm > worried this gets into the hotly debated territory of abusing > context.Value. On the other hand, we're already passing context everywhere, > and this is useful context that crosses API boundaries. > > Anywho, would love to get thoughts from the experts out there. Thanks for > reading! > > Alex > > > [1] https://github.com/ohsu-comp-bio/funnel > [2] https://github.com/sirupsen/logrus > [3] > https://github.com/ohsu-comp-bio/funnel/blob/master/worker/runner.go#L25 > [4] https://github.com/ohsu-comp-bio/funnel/pull/194 > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.