55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
import logging
|
|
import os
|
|
|
|
LOG_PATH = os.path.abspath(
|
|
os.path.join(os.path.dirname(__file__), "..", "logs", "app.log"))
|
|
|
|
def _get_log_level():
|
|
"""Get log level from environment variable."""
|
|
level_str = os.getenv("LOG_LEVEL", "INFO").upper()
|
|
|
|
# Try to convert to integer
|
|
if level_str.isdigit():
|
|
return int(level_str)
|
|
|
|
# Map string to logging level
|
|
levels = {
|
|
"CRITICAL": logging.CRITICAL,
|
|
"FATAL": logging.FATAL,
|
|
"ERROR": logging.ERROR,
|
|
"WARN": logging.WARNING,
|
|
"WARNING": logging.WARNING,
|
|
"INFO": logging.INFO,
|
|
"DEBUG": logging.DEBUG,
|
|
"NOTSET": logging.NOTSET,
|
|
}
|
|
|
|
return levels.get(level_str, logging.INFO)
|
|
|
|
LOG_LEVEL = _get_log_level()
|
|
|
|
def logger_initialize() -> logging.Logger:
|
|
"""Initialize the logger for the application. Return a logger that logs to console and a app.log."""
|
|
logger = logging.getLogger("PlexPlaylistSync")
|
|
if logger.hasHandlers():
|
|
return logger
|
|
|
|
# check log path exists, if not create it
|
|
os.makedirs(os.path.dirname(LOG_PATH), exist_ok=True)
|
|
|
|
logger.setLevel(LOG_LEVEL)
|
|
# 2025-07-19 17:23:05,116 [levelname]: message
|
|
formatter = logging.Formatter("%(asctime)s [%(levelname)s]: %(message)s")
|
|
file_handler = logging.FileHandler(LOG_PATH, encoding="utf-8")
|
|
file_handler.setFormatter(formatter)
|
|
|
|
# add file handler
|
|
logger.addHandler(file_handler)
|
|
# console handler
|
|
console_handler = logging.StreamHandler()
|
|
console_handler.setFormatter(formatter)
|
|
logger.addHandler(console_handler)
|
|
|
|
return logger
|
|
|
|
logger = logger_initialize() |