2013-06-01 26 views
11

Theo mặc định, tôi có thể bật đăng nhập settings.py trong cấu hình CÀI ĐẶT bằng cách tạo trình ghi nhật ký "" sẽ bắt tất cả. Nhưng nếu tôi chỉ muốn nhìn thấy đăng nhập từ các ứng dụng của dự án của tôi như trái ngược với nội bộ Django?Chỉ ghi nhật ký Django cho các ứng dụng của tôi

Tôi có thể tưởng tượng rõ ràng nhận được nhật ký trong mỗi mô-đun ứng dụng Django của mình và đặt tên cho nó theo một số quy ước, ví dụ: logging.getLogger("myproject." + __file__). Sau đó, tôi có thể tạo ra một logger gọi là 'myproject' (trong CÀI ĐẶT) mà chọn lên tất cả những điều này để đầu ra. Tôi không muốn hardcode tên dự án của tôi, vì vậy tôi sẽ làm một số os.path logic trên ___file___ để trích xuất không gian tên đầy đủ lên đến tập tin ở bất kỳ độ sâu tùy ý.

Tại thời điểm này, tôi dừng lại và tự hỏi có cách nào dễ dàng hơn không?

+1

Bạn đã đọc qua tài liệu ghi nhật ký chưa (https://docs.djangoproject.com/en/dev/topics/logging/#configuring-logging)? Có một "myproject.custom" logger xuất hiện tương tự như những gì bạn đang tìm kiếm. –

+0

Vâng tôi đã làm. Tôi không thấy bất cứ điều gì đơn giản hóa những gì tôi mô tả, nhưng nếu nó làm điều đó sẽ là một câu trả lời tuyệt vời. –

+1

Tôi đọc lại câu hỏi của bạn sau khi tôi đăng nhận xét của mình và nhận ra rằng có thể sẽ không cung cấp thêm bất kỳ thông tin chi tiết nào. Để đó, xin lỗi. –

Trả lời

9

Không chắc chắn nếu tôi hiểu đầy đủ câu hỏi của bạn, bởi vì câu trả lời có vẻ quá đơn giản.

Giả sử bạn đã xác định trong LOGGING một handler cho các ứng dụng của dự án của bạn, ví dụ như thế này:

'handlers': { 
    'handler_for_my_apps': { 
     'level': 'DEBUG', 
     'class': 'logging.FileHandler', 
     'filename': 'debug.log', 
    }, 

và cấp cho ứng dụng của bạn app1, app2, và vì vậy, bạn có thể có tất cả các bản ghi từ những ứng dụng mà không cần bản ghi nội bất kỳ của Django bằng cách xác định logger:

'loggers': { 
    'app1': { 
     'handlers': ['handler_for_my_apps'], 
     'level': 'DEBUG', 
    }, 
    'app2': { 
     'handlers': ['handler_for_my_apps'], 
     'level': 'DEBUG', 
    }, 

sẽ không có bản ghi Django trong cùng một tập tin, tất nhiên trừ khi bạn định nghĩa một logger tên django với han dler handler_for_my_apps.

Trong ứng dụng của bạn, bạn có thể nhận được trình ghi nhật ký sử dụng logging.getLogger(__name__) theo khuyến cáo của tài liệu.

Trừ khi tôi hiểu lầm câu hỏi của bạn ...

6

Bạn có thể sử dụng một chương trình như sau để tạo logger giống hệt nhau cho tất cả các ứng dụng địa phương của bạn mà không cần phải thêm chúng tất cả để cấu hình đăng nhập.

Thứ nhất, chia ra các ứng dụng địa phương của bạn:

LOCAL_APPS = [ 
    'myapp1', 
    'myapp2', 
    ... 
] 

THIRD_PARTY_APPS = [ 
    'django. ...', 
    ... 
] 

INSTALLED_APPS = LOCAL_APPS + THIRD_PARTY_APPS 

Tiếp theo, tạo cấu hình logger cho các ứng dụng địa phương của bạn:

local_logger_conf = { 
    'handlers': ['my_handler',], 
    'level': 'DEBUG', 
} 

Cuối cùng, xác định logger của bạn như sau:

'loggers': { app: copy.deepcopy(local_logger_conf) for app in LOCAL_APPS } 
Các vấn đề liên quan