Some checks failed
CI / Run tests (pull_request) Has been cancelled
42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
import logging
|
|
import os
|
|
import tempfile
|
|
import sys
|
|
|
|
# Determine log level from environment variable `LOG_LEVEL` (e.g. DEBUG, INFO)
|
|
raw_level = os.getenv("LOG_LEVEL", "INFO").upper()
|
|
level = logging.INFO
|
|
if raw_level.isdigit():
|
|
try:
|
|
level = int(raw_level)
|
|
except Exception:
|
|
level = logging.INFO
|
|
else:
|
|
level = getattr(logging, raw_level, logging.INFO)
|
|
|
|
logging.basicConfig(level=level, format='[%(levelname)s] %(asctime)s: %(name)s: %(message)s')
|
|
LOGGER = logging.getLogger('botmafieux')
|
|
LOGGER.setLevel(level)
|
|
|
|
# Decide log file path: prefer LOG_FILE, then CONFIG_PATH/botmafieux.log, then /tmp
|
|
preferred = os.getenv('LOG_FILE')
|
|
if not preferred:
|
|
cfg_path = "/logs"
|
|
if cfg_path:
|
|
preferred = os.path.join(cfg_path, 'botmafieux.log')
|
|
else:
|
|
preferred = os.path.join(tempfile.gettempdir(), 'botmafieux.log')
|
|
|
|
formatter = logging.Formatter('%(asctime)s:%(levelname)s:%(name)s: %(message)s')
|
|
|
|
try:
|
|
handler = logging.FileHandler(filename=preferred, encoding='utf-8', mode='a')
|
|
handler.setFormatter(formatter)
|
|
LOGGER.addHandler(handler)
|
|
except (PermissionError, OSError) as e:
|
|
# Fall back to console logging if file cannot be opened
|
|
stream_handler = logging.StreamHandler(sys.stdout)
|
|
stream_handler.setFormatter(formatter)
|
|
LOGGER.addHandler(stream_handler)
|
|
# Print a warning directly to stderr in case logging isn't yet configured elsewhere
|
|
print(f"[WARN] Could not open log file '{preferred}' for writing: {e}. Falling back to stdout.", file=sys.stderr) |