logging-Modul: DailyRollingFileHandler
Verfasst: Montag 10. Januar 2005, 21:21
Hallo!
Mir fehlte im Logging-Modul der DailyRollingFileHandler wie in log4j etc. besitzen. Daher habe ich ihn mir selbst geschrieben auf Basis des RotatingFileHandlers.
Falls es sowas schon gegeben haben sollte, wuerde ich mich ueber den Link freuen. Falls nicht, hoffe ich, dass mein Code nuetzlich ist
Mir fehlte im Logging-Modul der DailyRollingFileHandler wie in log4j etc. besitzen. Daher habe ich ihn mir selbst geschrieben auf Basis des RotatingFileHandlers.
Falls es sowas schon gegeben haben sollte, wuerde ich mich ueber den Link freuen. Falls nicht, hoffe ich, dass mein Code nuetzlich ist

Code: Alles auswählen
import logging
from datetime import date
import string
class DailyRollingFileHandler(logging.FileHandler):
def __init__(self, filename, mode="a"):
"""
Open the specified file and use it as the stream for logging.
Rollover occurs whenever the day changes.
The names of the log files each contain the date when they were
created. Thus if the filename "myapp.log" was used, the log files
each have look like myapp-2005-01-07.log etc.
The date is inserted at the position of the last '.' in the filename
if any or simply appended to the given name if no dot was present.
"""
self.currentDay = date.today()
# create the logfile name parts (base part and extension)
nameparts = string.split(string.strip(filename), ".")
self.filestub = ""
self.fileext = ""
# remove empty items
while nameparts.count("") > 0:
nameparts.remove("")
if len(nameparts) < 2:
self.filestub = nameparts[0]
else:
# construct the filename
for part in nameparts[0:-2]:
self.filestub += part + "."
self.filestub += nameparts[-2]
self.fileext = "." + nameparts[-1]
logging.FileHandler.__init__(self, self.getFilename(), mode)
def getFilename(self):
return self.filestub + "-" + self.currentDay.isoformat() + self.fileext
def doRollover(self):
"""
Do a rollover, as described in __init__().
"""
self.stream.close()
self.currentDay = date.today()
self.baseFilename = self.getFilename()
self.stream = open(self.baseFilename, "w")
def emit(self, record):
"""
Emit a record.
Output the record to the file, catering for rollover as described
in doRollover().
"""
msg = "%s\n" % self.format(record)
self.stream.seek(0, 2) #due to non-posix-compliant Windows feature
if date.today() != self.currentDay:
self.doRollover()
logging.FileHandler.emit(self, record)