Issue #120 [New/open] - can not use logging to the file together with webiopi

Posted by maciej2009

What steps will reproduce the problem?

import logging logging.basicConfig(filename='example.log',level=logging.DEBUG) logging.debug('This message should go to the log file') import webiopi logging.info('This message should also go to the log file, but is displayed in Terminall window after importing webiopi')

WebIOPi version used? =>0.0.7

Python version used? => 2.7

Distro used? (WebIOPi has only been tested on Raspbian Wheezy) => Yes- raspian Wheezy

Raspberry Pi board revision? (1 or 2) => B+

For Javascript side bugs, Browser? =>

Please provide any additional information below.


Comment 1

Posted by andreas.riegg

See info on this wiki page how to enable file logging and debugging within WebIOPi:

https://code.google.com/p/webiopi/wiki/INSTALL?tm=6

Just use the -l and -d options in interactive mode.

You can also set this for the webiopi daemon, just modify the coresponding command that starts webiopi as daemon. However, when run as daemon webiopi already logs to a file being /var/log/webiopi by default.

You find the details in webiopi.init.sh, but this is just the template, do not modify anything here unless you call setup.sh again (and know what you do ...).

Andreas


Comment 2

Posted by maciej2009

Hi Andreas,

I would like to apologize for my not clear issue description.

The problem I have rised is not linked to WEBIOPI logging features, that I have tested and it works OK.

The problem I faced is in my app in Python and influance (I guess) of WEBIOPI on standard Python logging module.

I would like to use your module for some home automation features. I want to use module "logging", which is included in Python to save in my app's log file history of running it.

The problem is, that after invoking WEBIOPI module in Python (using "import webiopi") all ma log request (i.e."logging.debug('XXXXXXX')) are not saved in log file but displayed in terminal window.

If I will try to run the same Python code without "import webiopi" everything is working fine. All log requests are saved in my log file.

The problem appears right after "import webiopi", before using WEBIOPI functions, classes etc. Just importing breaking logging feature :(

the line below: works OK

import logging

the line below: works OK

logging.basicConfig(filename='example.log',level=logging.DEBUG)

the line below: works OK

logging.debug('This message should go to the log file')

the line below: works OK - but from the moment "logging" is not working properly.

import webiopi

the line below: does no works. The text shoul be saved in log file but is not. Is displayed in terminal window.

logging.info('This message should also go to the log file, but is displayed in Terminall window after importing webiopi')

br, maciej


Comment 3

Posted by andreas.riegg

Yes, this is right and works as designed so far ... at least in the current release and how Eric implemented it.

If you import webiopi, you also import webiopi logging (see webiopi/utils/logger.py) and this grabs and configures the root logger. Your basic logger configuration will just be overwritten, as you discovered, after the import statement.

BUT, if you look at the code, WebIOPi looks to be able to log simultaneous to console AND log file (if you configure the log file using the -l parameter).

You may be able to create your own logger (logging.getLogger('mylogger') so that you can get different log entries (in the SAME log file) that can be distinguished by their different names. You may be also able to set different log levels for your logger, but I'm not sure if this works as WebIOPi sets currently direct the log level for the root logger, but you may try it. You may also be able to set a different file handler to your specific logger, but it is not recommended to do so according to the Python documentation.

See here (https://docs.python.org/2/howto/logging-cookbook.html) for very helpful tips and code examples on Python logging.

Andreas