[Twisted-Python] Configuring Twisted logging via plugins
Glyph Lefkowitz
glyph at twistedmatrix.com
Thu Aug 5 11:25:24 MDT 2010
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 :).
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20100805/f0e76757/attachment.html>
More information about the Twisted-Python
mailing list