我有一个django项目(利用芹菜),我正在尝试设置日志记录拱门。
我希望对Django的主要请求在一个日志文件中,而关于芹菜任务的日志在另一个日志文件中。
我已经定义了以下内容,但是我没有获取internals.tasks.cortex的日志。我的想法是我将记录器设置为内部组件,由于传播会捕获internals.tasks.cortex?但事实并非如此。但是,它总是输出到根记录器!
├── internals
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── celery.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── tasks
│ │ ├── __init__.py
│ │ ├── cortex.py
│ │ ├── setup.py
│ │ └── submission.py
│ └── views.py
├── logs
├── manage.py
└── xplorioc
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
settings.py
# # Logging configuration
LOGLEVEL = os.environ.get('LOGLEVEL', 'DEBUG').upper()
LOGGING_CONFIG = None
CUSTOM_LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'loggers': {
'': {
'level': LOGLEVEL,
'handlers': ['console', 'root'],
},
'internals': {
'level': LOGLEVEL,
'handlers': ['console', 'internals'],
'propagate': False
}
},
'formatters': {
'basic': {
'format': '%(asctime)s %(name)s / %(levelname)s / %(message)s',
'datefmt': '%Y/%m/%d %H:%M:%S',
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'basic',
},
'root': {
'level': LOGLEVEL,
'formatter': 'basic',
'class': 'logging.handlers.RotatingFileHandler',
'maxBytes': 1024 * 1024 * 1,
'backupCount': 0,
'filename': BASE_DIR + '/logs/root.log',
},
'internals': {
'level': LOGLEVEL,
'formatter': 'basic',
'class': 'logging.handlers.RotatingFileHandler',
'maxBytes': 1024 * 1024 * 1,
'backupCount': 0,
'filename': BASE_DIR + '/logs/internals.log',
}
}
}
logging.config.dictConfig(CUSTOM_LOGGING)
cortex.py
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
def test():
logger.debug('I only go to the root logger...')
更新--------
奇怪的是,如果我在cortex.py中添加以下内容:
logger = get_task_logger(__name__)
print(logger.name)
print(logger.parent.name)
print(logger.parent.parent.name)
它打印:
internals.tasks.cortex
celery.task
celery
2019/02/07 20:38:11 internals.tasks.cortex / DEBUG / I only go to the root logger...
所以,问题是,为什么路径根部从内部结构转换到芹菜?!