Не работает DEBUG режим на файл
Сделал логгер под себя, но у меня возникла проблема, что в режиме debug в любом случае в файл должен записываться, то бишь файл тупо в этом режиме, а остальное работает по аргументу, передаваемому в функцию. Короче вся проблема обстоит в том, что даже указав принудительно debug режим в файл хэндлер, он не работает должным образом.
def _create_logger(debug_mode: Optional[bool] = False) -> logging.Logger:
if not os.path.exists(f"{Constants.LOG_FOLDER}"):
os.makedirs(f"{Constants.LOG_FOLDER}")
log_file_path = os.path.join(f"{Constants.LOG_FOLDER}", f"log_{datetime.datetime.now().strftime("%Y-%m-%d_%H-%M")}.txt")
global logger
logger = logging.getLogger("STBLogger")
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler(log_file_path, encoding="utf-8")
file_handler.setLevel(logging.DEBUG) <--- вот я принудительно пытался
выставить debug мод, однако он все равно не записывает фулл логи, однако когда
ставишь "debug_mode = True" - все работает. По моим предположениям он
берет зависимость из хэндлера консоли,
однако по идеи так быть не должно (имхо)
if debug_mode:
logger.setLevel(logging.DEBUG)
console_handler.setLevel(logging.DEBUG)
else:
logger.setLevel(logging.INFO)
console_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter("%(message)s"))
logger.addHandler(file_handler)
console_handler.setFormatter(logging.Formatter('%(message)s'))
logger.addHandler(console_handler)
return logger
Ответы (1 шт):
Автор решения: aarab
→ Ссылка
Проблема была решена DictConfig`ом. Код прилагаю.
def _create_logger(debug_mode: Optional[bool] = False) -> logging.Logger:
if not os.path.exists(Constants.LOG_FOLDER):
os.makedirs(Constants.LOG_FOLDER)
log_file_path = os.path.join(Constants.LOG_FOLDER, f"log_{datetime.datetime.now().strftime('%Y-%m-%d__%H-%M')}.txt")
log_config = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': '%(asctime)s %(levelname)-10s | [%(body)s] | %(message)s',
'datefmt': '%H:%M:%S'
},
},
'handlers': {
'console': {
'level': 'DEBUG' if debug_mode else 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': log_file_path,
'encoding': 'utf-8',
'formatter': 'standard'
},
},
'loggers': {
'STBLogger': {
'level': 'DEBUG',
'handlers': ['console', 'file'],
'propagate': False
},
}
}
logging.config.dictConfig(log_config)
global logger
logger = logging.getLogger("STBLogger")