Re: [go-nuts] Re: Should we stop using a global logger?

2017-08-25 Thread Peter Mogensen


On 2017-08-25 05:58, Dave Cheney wrote:
>> Should we stop using a global logger?
> 
> Yes[1]
> 
> 1. https://dave.cheney.net/2017/01/26/context-is-for-cancelation
>

fair point...

It can be very tempting though. Especially dealing with an HTTP
middleware stack where you need handlers to log and automatically add
Req-ID to the logging.
Unless of course, you use a middleware framework designed to make a
logger available.

/Peter

-- 
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.


[go-nuts] Re: Should we stop using a global logger?

2017-08-25 Thread Dave Cheney


On Friday, 25 August 2017 16:02:48 UTC+10, snmed wrote:
>
> Hi Dave
>
> I've read about this context.Value topic on several occasion and in your 
> blog post you say context is only for cancelation. But how should one cope 
> with real goroutine specific data, unfortunately i missed always a correct 
> solution for this problem.
>

My recommendation is to pass it down from function to function, either as 
an argument, or as fields accessible from a method. 
 

> Any proposal is welcome
>
> Cheers snmed
>
>

-- 
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.


[go-nuts] Re: Should we stop using a global logger?

2017-08-25 Thread snmed
Hi Dave

I've read about this context.Value topic on several occasion and in your blog 
post you say context is only for cancelation. But how should one cope with real 
goroutine specific data, unfortunately i missed always a correct solution for 
this problem.

Any proposal is welcome

Cheers snmed

-- 
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.


[go-nuts] Re: Should we stop using a global logger?

2017-08-24 Thread buchanae . ohsu
Or, what if...


type FunnelContext interface {
  context.Context
  logger.Logger
}

type RequestHandler struct {
  // No context specific fields here, instance stays reusable across 
requests
}
func (RequestHandler) Handle(ctx FunnelContext) {}

 



On Thursday, August 24, 2017 at 8:58:15 PM UTC-7, Dave Cheney wrote:
>
> > 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.


[go-nuts] Re: Should we stop using a global logger?

2017-08-24 Thread Dave Cheney
> 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.