2012-04-24 37 views
9

Am trên django 1.3, python 2,6django khai thác gỗ - django.request logger và bối cảnh thêm

Trong các tài liệu django đây
https://docs.djangoproject.com/en/1.3/topics/logging/#django-request
nó nói rằng thông điệp có bối cảnh thêm như sau: tình trạng và yêu cầu.
Làm cách nào để hiển thị các tệp này để hiển thị trong tệp gỡ lỗi? tôi đã cố gắng trong khai thác gỗ cấu hình một cái gì đó của tôi như:

'formatters': {   
     'simple_debug': { 
      'format': '[%(asctime)s] %(levelname)s %(module)s %(message)s %(request.user)s',   
     } 
    }, 

nhưng điều đó làm cho khai thác gỗ tổng thể để thất bại (tức là không có đầu ra khai thác gỗ xảy ra)


EDIT: Vì vậy, ngay sau khi gửi câu hỏi i đã xem qua điều này: http://groups.google.com/group/django-users/browse_thread/thread/af682beb1e4af7f6/ace3338348e92a21

ai đó có thể giúp giải thích/xây dựng trên

Tất cả trích dẫn từ tài liệu thực sự có nghĩa là tất cả các địa điểm bên trong của django, nơi django.request được sử dụng, yêu cầu rõ ràng là được chuyển thành một phần phụ.

yêu cầu được chuyển giao một cách rõ ràng như là một phần bổ sung cho ai?

Trả lời

19

Bạn không thể sử dụng request.user trong chuỗi định dạng vì% định dạng không xử lý điều đó. Bạn có thể sử dụng một chuỗi định dạng như

'[%(asctime)s] %(levelname)s %(module)s %(message)s %(user)s' 

và trong cuộc gọi đăng nhập của bạn, sử dụng giống như

logger.debug('My message with %s', 'args', extra={'user': request.user}) 

Các extra dict được sáp nhập vào bản ghi sự kiện khai thác gỗ, mà kết thúc với một thuộc tính user , và điều này sau đó được chọn thông qua chuỗi định dạng và xuất hiện trong nhật ký.

Nếu sử dụng trình ghi nhật ký django.request, mã status_code và yêu cầu sẽ được chuyển vào số extra dict của Django. Nếu bạn cần request.user, có thể bạn sẽ cần phải thêm một logging.Filter mà làm điều gì đó như:

class RequestUserFilter(logging.Filter): 
    def filter(self, record): 
     record.user = record.request.user 
     return True 

để bạn có thể hiển thị cho người dùng trong các định dạng đầu ra.

+0

ah! điều đó hoàn toàn có ý nghĩa. cám ơn. –

0

django-requestlogging middleware plugin giúp dễ dàng ghi nhật ký thông tin liên quan đến yêu cầu mà không cần điều chỉnh tất cả cuộc gọi ghi nhật ký để thêm request với thông số extra. Nó chỉ là vấn đề cấu hình logger của bạn.

Các mục sau đây có thể được đăng nhập khi sử dụng django-requestlogging:

  • tên
  • HTTP_USER_AGENT
  • PATH_INFO
  • remote_add
  • REQUEST_METHOD
  • server_protocol
Các vấn đề liên quan