Django プロジェクト用に papertrail をセットアップしましたが、ロギングに失敗しOSError: [Errno 9] Bad file descriptor
ます。奇妙なことはdjango.setup()
、ロギング呼び出しの前に呼び出すと機能することです...
設定.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'json': {
'()': 'pythonjsonlogger.jsonlogger.JsonFormatter',
'fmt': '%(levelname)s %(asctime)s %(message)s',
},
},
'handlers': {
'papertrail': {
'level': 'DEBUG',
'class': 'logging.handlers.SysLogHandler',
'formatter': 'json',
'address': ('logsN.papertrailapp.com', 12345)
},
...
},
'loggers': {
'papertrail': {
'handlers': ['papertrail'],
'level': 'ERROR',
'propagate': True,
},
...
/管理/コマンド/logging_test.py
from django.core.management import BaseCommand
import django
import logging
# uncomment this line to make it work
#django.setup()
def test_logging():
logger = logging.getLogger('papertrail')
logger.error(
'TEST LOGGING'
)
class Command(BaseCommand):
def handle(self, *args, **options):
test_logging()
次のように test_logging 関数を呼び出すことができます。
./manage.py test_logging
行のコメントを外すと、django.setup()
機能します。理由がわかりません。