[Twisted-Python] Keeping logger from snatching stdout?

Glyph glyph at twistedmatrix.com
Wed Sep 5 01:27:22 MDT 2018



On Aug 29, 2018, at 3:48 PM, Jeff Grimmett <grimmtooth at gmail.com <mailto:grimmtooth at gmail.com>> wrote:

> I'm working on a Flask project using the flask_twisted package from PyPI and have encountered a mystery.  I don't *have* to solve it to move on, but darn it, I can't let it go :)
> 
> https://pypi.org/project/Flask-Twisted/ <https://pypi.org/project/Flask-Twisted/>
> https://github.com/cravler/flask-twisted/ <https://github.com/cravler/flask-twisted/>
> 
> So here's the breakdown: when use the standard logging module to output to a logfile + stdout, everything is fine.  I do see some logging output from Twisted as well (the web server part) but for the most part life is groovy.
> 
> I'm going to be integrating in a wxPython windows app to this (previously it's been a shell app) and step 1 was to make my own stdout handler that eventually would pipe all that stuff to a window in the wx app.  The first step of THAT (step 1.a) was to replace all the logging stuff with print() placeholders.

Why would you do this rather than simply handle logging events? Both twisted and the stdlib have mechanisms for adding observers that will give you access to more structured information - particularly useful if you are trying to display something in a GUI.

> At that point, things got confusing, as now ALL of my print()s are being handled by Twisted's logging handler.

This (sort of) makes sense...

> I brought flask-twisted in local to my code so I could monkey around with it. First thing I noticed was that it was using twisted.python.log. I messed around with that - commented it out, and now I get no stdout output at all.  Set the parameter setStdout to False, same thing.

So, this is the old, legacy API, and what you want to use is this: https://twistedmatrix.com/documents/current/api/twisted.logger.LogBeginner.beginLoggingTo.html <https://twistedmatrix.com/documents/current/api/twisted.logger.LogBeginner.beginLoggingTo.html>

But it doesn’t make sense to me that you would see no output at all, or that setStdout=False would swallow your print statements.

> The adapter code uses twisted.internet.reactor,  threads, twisted.web.server.Site, twisted.web.wsgi.WSGIResource, and twisted.web.resource.Resource, any one which might be responsible. I spent yesterday evening digging around but haven't found anything yet.

The only thing starting logging here appears to be flask-twisted; we only start logging in twist & twistd, within twisted itself.

> Any guidance / ideas?  

I'm very curious what is going on here, and whether it's a logging system bug.  Could you whittle this down to a minimal reproducer?

-glyph
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20180905/dd817f96/attachment.html>


More information about the Twisted-Python mailing list