-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogger_ocpp.py
More file actions
executable file
·99 lines (76 loc) · 2.75 KB
/
Copy pathlogger_ocpp.py
File metadata and controls
executable file
·99 lines (76 loc) · 2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# logger_setup.py
import logging
import os
import datetime
from logging.handlers import BaseRotatingHandler
from config import ALFEN_OCPP_LOG, LOG_LEVELS
LOGFILE = ALFEN_OCPP_LOG
class MonthlyRotatingFileHandler(BaseRotatingHandler):
"""
Roteert logbestanden op de eerste dag van elke maand om 00:00.
Bestandsnamen worden: Alfen-ocpp.log.YYYY-MM
"""
def __init__(self, filename, backupCount=12, encoding=None, delay=False):
self.backupCount = backupCount
super().__init__(filename, 'a', encoding, delay)
self.current_stamp = datetime.date.today().strftime("%Y-%m")
def shouldRollover(self, record):
"""Check of de maand is veranderd."""
now_stamp = datetime.date.today().strftime("%Y-%m")
return now_stamp != self.current_stamp
def doRollover(self):
"""Voer maandelijkse rotatie uit."""
if self.stream:
self.stream.close()
# nieuwe naam op basis van vorige maand
rotated_name = f"{self.baseFilename}.{self.current_stamp}"
# als het bestand bestaat → rename
if os.path.exists(self.baseFilename):
os.rename(self.baseFilename, rotated_name)
# update huidige maand
self.current_stamp = datetime.date.today().strftime("%Y-%m")
# verwijder oude backups
self._cleanup_old_backups()
# open nieuw logbestand
self.stream = self._open()
def _cleanup_old_backups(self):
"""Verwijder oude maandbestanden als backupCount is bereikt."""
dirname = os.path.dirname(self.baseFilename)
basename = os.path.basename(self.baseFilename)
# zoek bestanden zoals: Alfen-ocpp.log.YYYY-MM
files = [
f for f in os.listdir(dirname)
if f.startswith(basename + ".")
]
# sorteer op datum
files.sort()
# verwijder oudste
while len(files) > self.backupCount:
old = files.pop(0)
os.remove(os.path.join(dirname, old))
# ------------------------------
# Logger setup
# ------------------------------
_shared_handler = MonthlyRotatingFileHandler(
LOGFILE,
backupCount=12
)
_shared_formatter = logging.Formatter(
"%(asctime)s %(name)s: %(levelname)s: %(message)s"
)
_shared_handler.setFormatter(_shared_formatter)
def get_logger(name: str):
logger = logging.getLogger(name)
level_name = LOG_LEVELS.get(name)
if level_name is None:
level_name = "WARNING"
logger.warning(
f"'{name}' niet geregistreerd in config.LOG_LEVELS, "
f"val terug op WARNING"
)
level = getattr(logging, level_name)
logger.setLevel(level)
logger.propagate = False
if not logger.handlers:
logger.addHandler(_shared_handler)
return logger