I've found implementing LogValuer can be a useful approach as well. Depending on the package, it can be enough to suggest a package doesn't need to be doing any logging, and if refactoring code from unstructured to structured logging it's useful in any case. On Wednesday, August 23, 2023 at 12:29:31 PM UTC-7 Sean Liao wrote:
> If your modules are mostly structs with lifecycle methods, > do it like http.Server where the logger is a field (or option passed into > the constructor). > > Else if your modules take contexts, you could consider having your own > WithLogger / FromContext funcs to pass a logger in a context. > An advantage of this over a (declined in slog) global context key > is that this allows your consumers to target your module with a specific > logger. > > Finally, you can do the same as log / slog are doing with Default() > SetDefault() > possibly guarded with an RWMutex, or just document that it's unsafe to > change after start. > > Personal preference is for 1, > and whether you take a Logger vs Handler > would just be if you have a preference for a different frontend. > > - sean > > > On Wed, Aug 23, 2023 at 7:09 PM TheDiveO <harald....@gmx.net> wrote: > >> Up front, I admit my sin of arrogance in giving structured logging the >> slip these past years and misusing logrus just as a text logger with >> multiple log levels. This question is kind of my atoning... >> >> For preparation, I've read through (today's?) Go slog blog post, as well >> as some comparably recent 3rd party blog posts about Golangs new slog. >> >> What I haven't found (or maybe stubbornly refused to see) is: as I want >> to convert my existing consumable modules to slog, how am I going to be a >> good citizen, so other modules can easily consume my modules with proper >> control over logging? How am I giving my module "customers" control over >> per-module (but not necessarily per-package) logging? Are there already >> best practises and what are they? >> >> While ponding these questions, I would suspect, that creating a >> per-module default "slogger" when none has been set in a module's init() >> would be a bad idea: due to the order of module initialization, all my >> module customers/consumers would end up with the default slogger that >> mostly would not fit their needs. >> >> Simply exposing a public variable would be either suffering the init >> problem, or alternatively, I would create default sloggers that then have >> to be garbage collected anyway. >> >> And now, Ladies and Gentlemens, show me your consumable slogging please! >> I want to learn! >> >> -- >> 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...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/cc4f2bcb-4972-4966-b2ff-341f29339d67n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/golang-nuts/cc4f2bcb-4972-4966-b2ff-341f29339d67n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/370fc8ef-f30b-4570-85d3-8f7eec7457f7n%40googlegroups.com.