----- Original Message -----
> On Aug 8, 2013, at 6:40 AM, Igor Galić <i.ga...@brainsware.org> wrote:
> 
> > 
> > 
> > ----- Original Message -----
> >> 
> >> 
> >> Hi folks,
> >> 
> >> right now many of plugins send error messages without prefixing the plugin
> >> they come from, this bad practice is also continued in our examples.
> >> 
> >> many error messages also close with `\n`, although this is not necessary.
> >> 
> >> We should fix this by "normalizing" the way we send those error messages.
> >> 
> >> My proposal is either:
> >> 
> >>    TSError("%s: cannot parse file %s", PLUGIN_NAME, filename);
> >> 
> >> xor:
> >> 
> >>    TSError("[%s] cannot parse file %s", PLUGIN_NAME, filename);
> >> 
> >> I have no strong leanings towards either. BUT: We should have one
> >> consistent
> >> format between examples and plugins, as well as newly imported code.
> >> 
> >> The word "error" should not be repeated, as it is already in the "severity
> >> (`TSError()`). There should be *no* `\n` at the end of the message.
> >> 
> >> Normally I would just grep the source and see which use-case is the
> >> prevailing one, but I'm too tired and I'm flying to Ireland tomorrow,
> >> so I'm leaving this as "an exercise to the student" ;)
> >> 
> >> reference issue: https://issues.apache.org/jira/browse/TS-2106
> > 
> > 
> > 
> > I've been looking at this for the past two days and I must say, so far
> > the combination I like best are the macros in the gzip plugin:
> > 
> > 
> > 
> > #define debug(fmt, args...) do {                                    \
> >  TSDebug(PLUGIN_NAME, "DEBUG: [%s:%d] [%s] " fmt, __FILE__, __LINE__,
> >  __FUNCTION__ , ##args ); \
> >  } while (0)
> > 
> > #define info(fmt, args...) do {                                    \
> >  TSDebug(PLUGIN_NAME, "INFO: " fmt, ##args ); \
> >  } while (0)
> > 
> > #define warning(fmt, args...) do {                                    \
> >  TSDebug(PLUGIN_NAME, "WARNING: " fmt, ##args ); \
> > } while (0)
> > 
> > #define error(fmt, args...) do {                                    \
> >  TSError("[%s], [%s:%d] [%s] ERROR: " fmt, PLUGIN_NAME, __FILE__, __LINE__,
> >  __FUNCTION__ , ##args ); \
> >  TSDebug(PLUGIN_NAME, "[%s:%d] [%s] ERROR: " fmt, __FILE__, __LINE__,
> >  __FUNCTION__ , ##args ); \
> > } while (0)
> > 
> > #define fatal(fmt, args...) do {    \
> >  error(fmt, ##args );             \
> >  exit(-1);                         \
> > } while (0)
> 
> These are not terrible, though I'd tend to do something like:
> 
> #define debug(fmt, ...) do { \
>     if (unlikely(TSIsDebugTagSet(PLUGIN_NAME))) { \
>         TSDebug(PLUGIN_NAME, fmt, ##__VA_ARGS__); \
>     } \
> } while(0)
> 
> so that format string arguments are not evaluated unless we are going to
> print something.
> 
> > 
> > 
> > What'd you think we make this a default API?
> 
> I'm happy to make this change for in-tree plugins. I don't think this is
> ready for external API status. I don't much like the dependency on
> PLUGIN_NAME, and there are plugins (eg. spdy) that use the debug tag
> differently.
> 
> I'm definitely in favour of having the in-tree plugins log consistently
> though.

I'm perfectly fine with delivering this non-API for our in-tree plugins then.

For compelteness: Can someone please enlighten me as to how
TSTextLogObjectWrite() fits into the this whole picture?


> For an external debug logging API, I'd like to see something more similar to
> the internal Debug API, with real suport for log levels and
> proxy.config.diags.show_location.


+1, go for it.

> J
> 
> 

-- 
Igor Galić

Tel: +43 (0) 664 886 22 883
Mail: i.ga...@brainsware.org
URL: http://brainsware.org/
GPG: 6880 4155 74BD FD7C B515  2EA5 4B1D 9E08 A097 C9AE

Reply via email to