Logging module does not print in IPython

ipython, logging, python, qtconsole

Solution

It seems like `qtconsole` adds an handler to the `root` logger:

In [1]: import logging
   ...: root = logging.getLogger()
   ...: root.handlers
   ...: 
Out[1]: [<logging.StreamHandler at 0x7fd8e00e1f98>]

While using the normal python interpreter or just `ipython`:

In [1]: import logging

In [2]: root = logging.getLogger()

In [3]: root.handlers
Out[3]: []

If you want both to behave the same you should either add a `StreamHandler` to the root logger for normal `ipython`, or remove the `StreamHandler` from the qtconsole interpreter.

If you want the former just add:

root = logging.getLogger()
root.addHandler(logging.StreamHandler())

If you want the latter, before adding your own handler, do:

for handler in root.handlers[:]:
    root.removeHandler(handler)

Note that IPython already provides some machinery for logging to a file. See the documentation. If you want to use the code only inside ipython using its magics might be simpler.

Problem

The following code does print 'I want this to print' in 'ipython qtconsole', however it does not print in plain IPython. ``` import logging import logging.handlers log = logging.getLogger() f = logging.Formatter("%(asctime)s - %(module)s. %(funcName)s - %(levelname)s - %(message)s") fh = logging.handlers.TimedRotatingFileHandler('log.txt', 'W6') fh.setFormatter(f) log.addHandler(fh) log.setLevel(logging.INFO) log.info('I want this to print') ``` In 'IPython qtconsole' however i get different problems, that i tried to explain here (which did not go so well, no need to read!). Can you please tell me why? EDIT: I use Python 2.7 EDIT2: Maybe i really just need to add logging.StreamHandler.

Original source