How to log Python warnings in a Django log file?

I have a Django application that I am migrating from v1.8 to v1.10. In the process of doing this work, I ran my application through:

python -Wall manage.py runserver

This leads to several warnings in Python in my console. I would like these warnings to appear in my Django application log, so I can check them later. I thought my application log handler would catch these warnings, but it is not. The log handler looks like this (taken from settings.py):

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt': "%d/%b/%Y %H:%M:%S"
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'file': {
            'level': 'WARNING',
            'class': 'logging.FileHandler',
            'filename': 'myapp.log',
            'formatter': 'verbose'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'propagate': True,
            'level': 'WARNING',
        },
        'myapp': {
            'handlers': ['file'],
            'level': 'WARNING',
        },
    }
}

How can I grab the Python warnings (c -Wall) in my Django log to study later?

+4
source share
1 answer

, python -Wall manage.py <command>, . Python2.7 , , .

.

import logging
logging.captureWarnings(True)

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt': "%d/%b/%Y %H:%M:%S"
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'file': {
            'level': 'WARNING',
            'class': 'logging.FileHandler',
            'filename': 'myapp.log',
            'formatter': 'verbose'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'propagate': True,
            'level': 'WARNING',
        },
        'myapp': {
            'handlers': ['file'],
            'level': 'WARNING',
        },
        'py.warnings': {
            'handlers': ['file'],
            'level': 'WARNING',
            'propagate': True
        }
    }
}

manage.py, , myapp.log.

, py.warnings:

    logging.captureWarnings(True)

( ) py.warnings:

    'py.warnings': {
        'handlers': ['file'],
        'level': 'WARNING',
        'propagate': True
    }
+3

Source: https://habr.com/ru/post/1661638/


All Articles