之前写商城项目的时候,采用的日志处理方式为在终端输出或者写入文件,这样的话,项目部署上线之后,若服务器出现错误,需要到服务器查看相关的错误日志,很不方便。后期在学习别人开源项目的时候,学习到一个开源的实时错误报告工具--sentry。用sentry来管理日志,我们可以使用sentry官网(https://sentry.io/)提供的云服务,只需要注册一个sentry账号,这样我们就可以到官网查看错误日志。首先安装扩展包 pip install raven

djangosettings里配置sentry

 

INSTALLED_APPS = (
    'raven.contrib.django.raven_compat',
)
RAVEN_CONFIG = {
    'dsn': 此处填对应项目的dsn,
    # If you are using git, you can also automatically configure the
    # release based on the git info.
    # 'release': raven.fetch_git_sha(os.path.abspath(os.pardir)),
}

 

日志的配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True, # 是否禁用已经存在的日志器
    'root': {
        'level': 'WARNING',
        'handlers': ['sentry'],
    },
    'formatters': { # 显示日志的格式
        'verbose': {
            'format': '%(levelname)s  %(asctime)s  %(module)s '
                      '%(process)d  %(thread)d  %(message)s'
        },
    },
    'handlers': {  # 日志处理的方法
        'sentry': { 
            'level': 'ERROR', # To capture more than ERROR, change to WARNING, INFO, etc.
            'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
            'tags': {'custom-tag': 'x'},
        },
        'console': { # 在终端中输出
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        },
    'file':{
       'level':'INFO',
       'class':'logging.handler.RotaingFileHandler',
       'filename':os.path.join(os.path.dirname(BASE_DIR),'logs'), # 日志文件位置
       'maxBytes':300*1024*1024,
       'backupCount':10,
       'formatter':'verbose',
     } }, 'loggers': { # 日志器 'django': { # 日志器的名称 'level': 'ERROR', 'handlers': ['sentry', 'console', 'file'], 'propagate': True, # 是否继续传递日志信息 }, }

使用方法:

import logging
logger = logging.getLogger(__name__)
logger.error('There was some crazy error', exc_info=True, extra={
    # Optionally pass a request and we'll grab any information we can
    'request': request,
})

注意,添加了request才能看到发生错误的地方的上下文。

当有错误产生,可以登录官网查看错误信息,同时也会给注册时填写的邮箱发送邮件提醒。