mirror of
https://github.com/BOSWatch/BW3-Core.git
synced 2025-12-06 07:12:04 +01:00
Fehlerbehebung: Logging-Setup für Multi-Client-Betrieb korrigiert
- Logdateipfad wird vor dem Aufruf von fileConfig() über builtins.log_filename gesetzt - Entfernt manuelles Patchen des Loghandlers (BaseFilename, Stream etc.) nach dem Laden - Logging-Konfiguration (logger_client.ini) wird nur noch einmal geladen - logger_*.ini: Korrektur: interval=midnight ist nicht (mehr) offiziell unterstützt, Änderung auf korrekte Schreibweise (when=midnight, interval=1) - Ändern der Kommentare auf Englisch (stringent zu anderen Kommentaren)
This commit is contained in:
parent
676312e581
commit
34fd0c2f10
30
bw_client.py
30
bw_client.py
|
|
@ -27,11 +27,14 @@ if not paths.makeDirIfNotExist(paths.LOG_PATH):
|
|||
print("cannot find/create log directory: %s", paths.LOG_PATH)
|
||||
exit(1)
|
||||
|
||||
import logging
|
||||
import logging.config
|
||||
import logging.handlers
|
||||
import argparse
|
||||
import os
|
||||
import builtins
|
||||
|
||||
# Argumente zuerst parsen
|
||||
# parsing arguments first - this is needed to load the logging config file with the correct log filename
|
||||
parser = argparse.ArgumentParser(prog="bw_client.py",
|
||||
description="""BOSWatch is a Python Script to receive and
|
||||
decode german BOS information with rtl_fm and multimon-NG""",
|
||||
|
|
@ -42,28 +45,13 @@ parser.add_argument("-c", "--config", help="Name to configuration File", require
|
|||
parser.add_argument("-t", "--test", help="Start Client with testdata-set", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
# Logging-Konfiguration laden
|
||||
# set the log filename in the global namespace (mandatory for fileConfig)
|
||||
basename = os.path.splitext(args.config)[0]
|
||||
log_filename = f"{paths.LOG_PATH}{basename}.log"
|
||||
builtins.log_filename = log_filename
|
||||
|
||||
logging.config.fileConfig(paths.CONFIG_PATH + "logger_client.ini", disable_existing_loggers=False)
|
||||
|
||||
# Dynamischer Logdateiname basierend auf YAML-Datei
|
||||
yaml_basename = os.path.splitext(args.config)[0]
|
||||
log_filename = f"{paths.LOG_PATH}{yaml_basename}.log"
|
||||
|
||||
for handler in logging.getLogger().handlers:
|
||||
if isinstance(handler, logging.handlers.TimedRotatingFileHandler):
|
||||
handler.baseFilename = os.path.abspath(log_filename)
|
||||
handler.stream.close()
|
||||
handler.stream = open(handler.baseFilename, handler.mode)
|
||||
|
||||
# Placeholder-Logdatei löschen, falls dynamisch umgebogen
|
||||
placeholder_log = os.path.abspath(os.path.join(paths.LOG_PATH, "client.log"))
|
||||
if os.path.abspath(log_filename) != placeholder_log and os.path.isfile(placeholder_log):
|
||||
try:
|
||||
os.remove(placeholder_log)
|
||||
logging.debug("Überflüssige client.log gelöscht.")
|
||||
except Exception as e:
|
||||
logging.warning("Fehler beim Löschen von client.log: %s", e)
|
||||
|
||||
logging.debug("")
|
||||
logging.debug("######################## NEW LOG ############################")
|
||||
logging.debug("BOSWatch client has started ...")
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ keys=root
|
|||
[logger_root]
|
||||
handlers=screen,file
|
||||
level=NOTSET
|
||||
# NOTSET means: accept all levels (the handlers will filter by their own level)
|
||||
|
||||
[formatters]
|
||||
keys=simple,complex
|
||||
|
|
@ -30,11 +31,14 @@ keys=file,screen
|
|||
|
||||
[handler_file]
|
||||
class=handlers.TimedRotatingFileHandler
|
||||
interval=midnight
|
||||
backupCount=7
|
||||
formatter=complex
|
||||
level=ERROR
|
||||
args=('log/client.log',)
|
||||
args=(log_filename, 'midnight', 1, 7, 'utf-8')
|
||||
# explaining args:
|
||||
# - 'midnight' → rotate daily at midnight, Options: 'S', 'M', 'H', 'D', 'midnight' or 'W0'-'W6' (0=Monday, 6=Sunday)
|
||||
# - 1 → rotate every 1 "x" (see line above), Options: 1, 2, ..., 31
|
||||
# - 7 → keep last 7 logs, Options: 1, 2, ..., 31
|
||||
# - 'utf-8' → encoding of the log file, don't change
|
||||
|
||||
[handler_screen]
|
||||
class=StreamHandler
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ keys=root
|
|||
[logger_root]
|
||||
handlers=screen,file
|
||||
level=NOTSET
|
||||
# NOTSET means: accept all levels (the handlers will filter by their own level)
|
||||
|
||||
[formatters]
|
||||
keys=simple,complex
|
||||
|
|
@ -30,11 +31,14 @@ keys=file,screen
|
|||
|
||||
[handler_file]
|
||||
class=handlers.TimedRotatingFileHandler
|
||||
interval=midnight
|
||||
backupCount=7
|
||||
formatter=complex
|
||||
level=ERROR
|
||||
args=('log/server.log',)
|
||||
args=('log/server.log', 'midnight', 1, 7, 'utf-8')
|
||||
# explaining args:
|
||||
# - 'midnight' → rotate daily at midnight, Options: 'S', 'M', 'H', 'D', 'midnight' or 'W0'-'W6' (0=Monday, 6=Sunday)
|
||||
# - 1 → rotate every 1 "x" (see line above), Options: 1, 2, ..., 31
|
||||
# - 7 → keep last 7 logs, Options: 1, 2, ..., 31
|
||||
# - 'utf-8' → encoding of the log file, don't change
|
||||
|
||||
[handler_screen]
|
||||
class=StreamHandler
|
||||
|
|
|
|||
Loading…
Reference in a new issue