ich bin seit einigen Wochen python-Fan; mit wachsender Begeisterung sogar.
Ich möchte nun eine Klasse erschaffen, die bei der Erstellung den logger derart abändert, dass in ein seperates File mitgeloggt wird.
Wird die Klasse wieder gelöscht, dann soll der zusätzliche Handler wieder gelöscht werden und das "Zusatzlogfile" wird ins Archiv geschoben.
Ich bewege mich noch vorsichtig in den Klassen... dachte jedoch, dass das ganz nett ist.
Ich könnte logger sicher auch global definieren, das wollte ich jedoch vermeiden; ist doch irgendwie unschön, falls ich mal parallel einen Thread im Skript öffne... FWIW
Auf jeden Fall wird der extra Handler angehängt, aber leider nicht wieder gelöscht, wenn zum Schluss ein "del media" gemacht wird...
Mein Create-logger sieht so aus:
Code: Alles auswählen
def create_logger(LOG_FILENAME):
# create logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(
LOG_FILENAME, maxBytes=500000, backupCount=5)
handler.setLevel(logging.INFO)
# create formatter
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
# add formatter
handler.setFormatter(formatter)
# add handler to logger
logger.addHandler(handler)
return logger
Code: Alles auswählen
class media(object):
def __init__(self, CURSOR, logger, options, ID):
QUERY = "SELECT * FROM medias WHERE id='%s'" % (str(ID))
if options.debug:
logger.debug(QUERY)
CURSOR.execute(QUERY)
MEDIA = CURSOR.fetchone ()
self.id = MEDIA[0]
self.files = []
self.logfile = "%s_%s_%s.log" % (self.id, time.time(), vbc.RandomString(5));
# Logger
hdlr = logging.handlers.RotatingFileHandler("/var/log/%s" % self.logfile, maxBytes=500000, backupCount=5)
hdlr.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
self.logger = logger
def __del__(self):
# Del bestaetigen
self.logger.info("Objekt der id '%s' wurde geloescht" % self.id)
# Handler wegschmeissen
hdlr = logging.handlers.RotatingFileHandler("/var/log/%s" % self.logfile, maxBytes=500000, backupCount=5)
hdlr.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
hdlr.setFormatter(formatter)
hdlr.flush()
hdlr.close()
self.logger.removeHandler(hdlr)
# Logfiles in "old" verschieben....
commands.getoutput("mv /var/log/%s /var/log/old/%s"% (self.logfile, self.logfile))