Sử dụng Sentry để log exceptions và logging messages trong Django
Bài đăng này đã không được cập nhật trong 3 năm
Sentry là một ứng dụng để log lại bản ghi sử dụng để log exceptions và message trong Django. Để tìm hiểu thêm về Sendtry các bạn có thể tìm hiểu thêm về cài đặt và source code trên doc. Sentry thường đuọc sử dụng để log và thông báo lỗi trên server Python. Hôm nay tôi sẽ hướng dẫn thiết lập sentry để log exception và hỗ trợ celery trên máy local giúp các bạn hiểu cách cài đặt và hoạt động ném exception của sendtry.
1. Cài đặt và thiết lập sendtry
Cài đặt thông qua pip:
pip install sentry
Sau khi cài đặt hoàn thành, để generate các thiết lập của sendtry:
sentry init conf.py
Khi có lỗi sendtry sẽ gửi lỗi về thông qua email. Chúng ta có thể thay đổi thiết lập EMAIL_BACKEND
của sendtry để ném ra exception khi gửi mail lỗi.
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Để tạo database cho ứng dụng:
sentry --config=conf.py upgrade
Sau đó là có thể khởi chạy ứng dụng:
sentry --config=conf.py start
chuyển tới trang http://localhost:9000
để đăng kí vào tạo log đầu tiên cho project:
Đăng kí 1 team để tạo log đầu tiên:
2.Config Django
And that's all you have to do to log exceptions from a Django project. When the Sentry is running any exception thrown in Django will be logged. If your code uses Python logging module (directly or indirectly) or it has Celery tasks then you will have to add some more configuration.
Đến đây sendtry đã tự động log được các exceptions từ 1 django project. Nếu trong project của bạn sử dụng Celery task thì bạn sẽ phải add thêm vào config:
Dưới đây là 1 ví dụ code test chạy thử log đầu tiên Django:
from django.views import generic
class ExceptionView(generic.View):
def get(self, request, **kwargs):
raise ValueError('I don\'t like this value')
exception_view = ExceptionView.as_view()
![thumb_sentry3.png](https://images.viblo.asia/64be7c49-bd07-4c80-8a9f-5a054990416d.png)
Khi ứng dụng có exception Sentry sẽ tự động ghi log về nó và gửi xuống cho chúng ta:
3.Logging từ Celery Task
Ngoài ra chúng ta có thể log từ các module log khác của django. dưới đây là 1 ví dụ log từ module log:
import logging
from django import http
from django.views import generic
logger = logging.getLogger(__name__)
class LoggingView(generic.View):
def get(self, request, **kwargs):
logger.warning("An error")
return http.HttpResponse("ok")
logging_view = LoggingView.as_view()
class InheritingView(LoggingView):
pass
inheriting_view = InheritingView.as_view()
Trong Settings
của Django ta cấu hình:
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'root': {
'level': 'DEBUG',
'handlers': ['sentry'],
},
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
},
'handlers': {
'sentry': {
'level': 'DEBUG',
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
}
},
'loggers': {
'django.db.backends': {
'level': 'ERROR',
'handlers': ['console'],
'propagate': False,
},
'raven': {
'level': 'DEBUG',
'handlers': ['console'],
'propagate': False,
},
'sentry.errors': {
'level': 'DEBUG',
'handlers': ['console'],
'propagate': False,
},
},
}
Nó sẽ tự động log mọi thứ và gửi cho sendtry:
Để Log các task chạy bên dưới Celery ta sẽ thêm logger
vào LOGGING
ở config file:
'celery': {
'level': 'WARNING',
'handlers': ['sentry'],
'propagate': False,
},
Và cover hết các Exception:
from celery import task
@task()
def celery_task():
logger = celery_task.get_logger()
logger.warning("celerrrrrrrrrry log")
Như vậy chúng ta đã tìm hiểu thiết lập 1 ứng dụng có thể ghi lại toàn bộ log cho ứng dụng Django. giúp cho ta dễ dàng quản lý lỗi exception, hay bất cứ sự kiện nào của server.
All rights reserved