簡體   English   中英

如何在Django日志文件中記錄Python警告?

[英]How to log Python warnings in a Django log file?

我有一個Django應用程序,我將從v1.8遷移到v1.10。 在完成這項工作的過程中,我通過以下方式運行我的應用程序:

python -Wall manage.py runserver

這樣做會導致許多Python警告出現在我的控制台中。 我想在我的Django應用程序日志中顯示這些警告,以便稍后檢查它們。 我以為我的應用程序的日志處理程序會捕獲這些警告,但事實並非如此。 日志處理程序如下所示(從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',
        },
    }
}

如何在我的Django日志中捕獲Python警告(使用-Wall )以供日后檢查?

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
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM