Ведение журнала внутри функции, вызываемой django-apscheduler
У меня запущен django-специфический планировщик: django-apscheduler и он прекрасно работает как планировщик, он запускает необходимые задания, как требуется, но у меня есть проблема с логированием внутри функции, вызываемой планировщиком. Логгер создается без ошибок, с именем, как определено в settings.py, но выглядит странно, имеет несколько атрибутов, имеет уровень = 0, и ничего не делает с командами ведения журнала.
Часть settings.py
LOGGING = {
"version": 1, # the dictConfig format version
"disable_existing_loggers": False, # retain the default loggers
"handlers": {
"debug_file": {
"class": "logging.FileHandler",
"filename": BASE_DIR / "main/logs/debug.log",
"level": "DEBUG",
"formatter": "verbose",
},
"error_file": {
"class": "logging.FileHandler",
"filename": BASE_DIR / "main/logs/errors.log",
"level": "ERROR",
"formatter": "verbose",
},
"cron_file": {
"class": "logging.FileHandler",
"filename": BASE_DIR / "main/logs/cron.log",
"level": "DEBUG",
"formatter": "verbose",
},
},
"loggers": {
"main.payment_callback": {
"level": "DEBUG",
"handlers": ["debug_file", "error_file"],
"propagate": True,
"cron": {
"level": "DEBUG",
"handlers": ["cron_file"],
"propagate": True,
},
},
},
"formatters": {
"verbose": {
"format": "{name} {levelname} {asctime} {module} {message}",
"style": "{",
},
"simple": {
"format": "{levelname} {message}",
"style": "{",
},
},
}
Часть scheduler.py, используемая для добавления задания:
import logging
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.executors.pool import ProcessPoolExecutor, ThreadPoolExecutor
from django_apscheduler.jobstores import register_events, register_job
from django.conf import settings
from .cron import manager_subscribtion_updater
# Create scheduler to run in a thread inside the application process
scheduler = BackgroundScheduler(settings.SCHEDULER_CONFIG)
def start():
if settings.DEBUG:
# Hook into the apscheduler logger
logging.basicConfig()
logging.getLogger('apscheduler').setLevel(logging.DEBUG)
try:
scheduler.add_job(manager_subscribtion_updater, "cron", id="manager_subscribtion_updater", day_of_week='0-6', hour=14, minute=51, misfire_grace_time=3, replace_existing=True)
except Exception as e:
print(e)
# Add the scheduled jobs to the Django admin interface
register_events(scheduler)
scheduler.start()
Часть вызванной функции manager_subscribtion_updater.py
import logging
from datetime import timedelta, datetime, tzinfo, timezone, date, time
from django.core.exceptions import ObjectDoesNotExist
from .models import (
Subscription,
UserPaymentMetod,
SubscriptionStatus
)
from .payments import autopayment_manager, new_guaranty_subscribtion_workflow
logger = logging.getLogger('cron')
def manager_subscribtion_updater():
""" Describtion
"""
logger.debug('Starting manager_subscribtion_updater')
В этой функции объект логгера 'cron' является каким-то полупустым и не работает.
Не могу разобраться, что делать с этим регистратором?