39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from datetime import datetime
|
|
from logging import FileHandler
|
|
from pathlib import Path
|
|
|
|
|
|
class DatedFileHandler(FileHandler):
|
|
def __init__(self, file_prefix: str, **kwargs):
|
|
if not file_prefix:
|
|
raise ValueError("`file_prefix` argument cannot be empty.")
|
|
self._file_prefix = file_prefix
|
|
kwargs["filename"] = self._make_filename()
|
|
super().__init__(**kwargs)
|
|
|
|
def _make_filename(self) -> str:
|
|
"""
|
|
Create the filename for the current logfile, using the configured file prefix and the
|
|
current date and time. If the directory does not exist, it gets created.
|
|
|
|
:return: A filepath.
|
|
"""
|
|
filepath = Path(f"{self._file_prefix}-{datetime.now():%Y%m%d-%H%M%S}.log")
|
|
if not filepath.parent.is_dir():
|
|
filepath.parent.mkdir(parents=True, exist_ok=True)
|
|
return str(filepath)
|
|
|
|
def do_rollover(self):
|
|
"""
|
|
Close the current logfile and create a new one with the current date and time.
|
|
"""
|
|
self.acquire()
|
|
try:
|
|
if self.stream:
|
|
self.stream.close()
|
|
|
|
self.baseFilename = self._make_filename()
|
|
self.stream = self._open()
|
|
finally:
|
|
self.release()
|