0

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()機能します。理由がわかりません。

4

1 に答える 1