On Aug 5, 2010, at 12:44 AM, Valeriy Zamarayev wrote:

> Hello, all.
> 
> There have been a few questions on this list about how to configure
> Twisted logging via plugins, as opposed to .tac files. And we now know
> about the #638 and #3534 tickets. Hopefully, they will be resolved
> soon.
> 
> But before this happens, it seems to me there's no other way to handle
> this than to use a "monkey patching" techinque on Twisted (excluding
> patching the Twisted source code itself).
> 
> We need to access the 'application' object when the server starts. We
> can do this when the 'twistd' code calls setServiceParent on the
> service returned by the plugin. So if we wrap setServiceParent, we can
> access the application object and do what we want.
> 
> See the code:  http://gist.github.com/505926
> 
> This works for me. I don't know if a better and less dangerous way to
> achieve the same exists. Maybe there is one?


This actually looks pretty ingenious to me!  It uses public APIs... mostly.  
I'd have to think pretty hard about whether this particular interface is 
actually supported, of course, since you're depending on extra stuff from your 
service parent which hypothetically may not actually be there.

If you're looking for aesthetic advice, it would be a bit nicer to use 
something like proxyForInterface and wrap the underlying service, rather than 
setting an attribute on it and clobbering its setServiceParent method.

Also... you could write a twistd plugin that could be used directly, instead of 
code that needs to be adapted / re-written for each different twistd plugin.  
Your code can scan the IServiceMaker plugin registry just as well as twistd 
itself can.

So you could have

  twistd my-custom-logger --my-log-option-1 --my-log-option-2 web --path 
~/public_html

and have the my-custom-logger plugin delegate to all twistd subcommands.

That's a pattern which should remain useful even after #638 is fixed.

Code to do this properly is left as an exercise for the reader, of course :).


_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to