Non riesco a eseguire un file di registrazione al volo. Cambio di rubrica.Come modificare il filehandle con la registrazione Python al volo con classi diverse e importazioni
Ad esempio, ho 3 classi
one.py
import logging
class One():
def __init__(self,txt="?"):
logging.debug("Hey, I'm the class One and I say: %s" % txt)
two.py
import logging
class Two():
def __init__(self,txt="?"):
logging.debug("Hey, I'm the class Two and I say: %s" % txt)
config.py
import logging
class Config():
def __init__(self,logfile=None):
logging.debug("Reading config")
self.logfile(logfile)
myapp
from one import One
from two import Two
from config import Config
import logging
#Set default logging
logging.basicConfig(
level=logging.getLevelName(DEBUG),
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
filename=None
)
logging.info("Starting with stdout")
o=One(txt="STDOUT")
c=Config(logfile="/tmp/logfile")
# Here must be the code that change the logging configuration and set the filehandler
t=One(txt="This must be on the file, not STDOUT")
Se provo loggin.basicConfig()
ancora una volta, non funziona.
Funziona anche con il daemon python! –
In realtà non si dovrebbero rimuovere i gestori da un elenco mentre si sta iterando su di esso, nel mio caso uno dei logger è rimasto nell'elenco. Vedi [questo thread] (http://stackoverflow.com/questions/7484454/removing-handlers-from-pythons-logging-loggers). Il semplice 'log.handlers = [fileh]' dovrebbe funzionare. – hillel
@hillel: ah, infatti, il ciclo dovrebbe fare una copia; corretto. Prendi in considerazione che il metodo 'removeHandler()' si occupa anche del blocco per rendere i gestori della rimozione thread-safe, sebbene assegnare direttamente un nuovo oggetto lista * dovrebbe * anche essere soddisfacente. –