I'm sorry, I forgot to complete this thread.
Following Mike's idea, I came up with something like this :
in a module called logset.py :
def counted(fn):
def wrapper(*args, **kwargs):
wrapper.count += 1
return fn(*args, **kwargs)
wrapper.count = 0
wrapper.__name__ = fn.__name__
return wrapper
class MyLogger(logging.Logger):
def __init__(self, name=None, level=logging.NOTSET):
super(MyLogger, self).__init__(name, level)
@counted
def info(self, *args, **kwargs):
super(MyLogger, self).info(*args, **kwargs)
@counted
def warning(self, *args, **kwargs):
super(MyLogger, self).warning(*args, **kwargs)
@counted
def critical(self, msg, *args, **kwargs):
super(MyLogger, self).warning(*args, **kwargs)
@counted
def error(self, *args, **kwargs):
super(MyLogger, self).warning(*args, **kwargs)
def logfile(self):
for h in self.handlers:
if hasattr(h, 'baseFilename'):
return h.baseFilename
def empty(self):
if self.warning.count or self.critical.count or self.error.count:
return False
else:
return True
def status(self):
msg = "WARNINGS:%s ERRORS:%s CRITICAL:%s" % (self.warning.count, self.error.count, self.critical.count)
return msg
def addLogFile(logger, filepath):
handler = logging.FileHandler(filepath, "w", encoding=None, delay="true")
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(levelname)s\t: %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
def addLogConsole(logger):
handler = logging.StreamHandler()
handler.setLevel(logging.WARNING)
formatter = logging.Formatter("%(levelname)s\t: %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
def myLog(level=None):
if not LOGGER.handlers:
# "Adding Handlers..."
addLogConsole(LOGGER)
addLogFile(LOGGER, '#YOUR LOG FILE#')
return LOGGER
LOGGER = MyLogger("root")
In my app's start file :
from logset import myLog
.
.
. # Initialize the log
root = myLog()
.
.
. # Do something in your app and at end check :
if not root.empty():
print "\nProgram has logged some errors, check log : %s" % root.logfile()
print root.status()
# now I can send root.logfile() via smtp for further examination
You can repeat the import in every module that needs logging, it always refers to the same logger object:
from logset import myLog
log = myLog()
.
.
.
log.info("Adding something")
log.debug("this var has value : %s" % value)
Thank you for your help and attention.
Enrico