Tôi đang phát triển một ứng dụng Django và tôi đang cố sử dụng mô-đun ghi nhật ký của Python để ghi nhật ký lỗi/theo dõi. Lý tưởng nhất là tôi muốn có các logger khác nhau được cấu hình cho các khu vực khác nhau của trang web. Cho đến nay tôi đã có tất cả những việc này, nhưng có một điều khiến tôi gãi đầu.Đăng nhập bằng Python ở Django
Tôi có trình ghi nhật ký gốc tới sys.stderr và tôi đã định cấu hình trình ghi nhật ký khác để ghi vào tệp. Tệp này nằm trong tệp settings.py của tôi:
sviewlog = logging.getLogger('MyApp.views.scans')
view_log_handler = logging.FileHandler('C:\\MyApp\\logs\\scan_log.log')
view_log_handler.setLevel(logging.INFO)
view_log_handler.setFormatter(logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s'))
sviewlog.addHandler(view_log_handler)
Có vẻ khá đơn giản. Đây là vấn đề, mặc dù: bất cứ điều gì tôi viết vào sviewlog được ghi vào tập tin đăng nhập hai lần. Bộ ghi gốc chỉ in nó một lần. Nó giống như addHandler() đang được gọi hai lần. Và khi tôi đặt mã của mình thông qua trình gỡ lỗi, đây chính xác là những gì tôi thấy. Mã trong settings.py được thực hiện hai lần, do đó, hai FileHandlers được tạo và được thêm vào cùng một cá thể của trình ghi nhật ký. Nhưng tại sao? Và làm thế nào để tôi có được điều này?
Có ai có thể cho tôi biết điều gì đang xảy ra ở đây không? Tôi đã cố gắng di chuyển các mã instantger logger/handler instantiation vào tập tin mà nó được sử dụng (kể từ đó thực sự có vẻ như là nơi thích hợp với tôi), nhưng tôi có cùng một vấn đề đó. Hầu hết các ví dụ tôi đã thấy trực tuyến chỉ sử dụng trình ghi nhật ký gốc và tôi muốn có nhiều trình ghi nhật ký.
Tôi không có chuyên gia Django, nhưng tôi tưởng tượng rằng settings.py sẽ được nhập mỗi khi một mô-đun được tải có một câu lệnh nhập khẩu với "cài đặt" trong đó. Càng nhiều mô-đun sử dụng settings.py, càng nhiều lần được nhập. –
@HartleyBrody [python cache modules] (http://docs.python.org/release/2.6/reference/simple_stmts.html#the-import-statement) khi chúng được tải, vì vậy thường một mô-đun nhất định chỉ được thực hiện một lần, bất kể số lượng các báo cáo nhập khẩu xuất hiện ở đâu. –
Theo [chú thích phát hành Django 1.4] (https://docs.djangoproject.com/en/dev/releases/1.4/#updated-default-project-layout-and-manage-py) vấn đề này có thể đã được giải quyết . –