2010-05-26 29 views
5

Có phương pháp hay nhất khi nói đến vị trí đặt chức năng ghi nhật ký trong ứng dụng MVC, ví dụ ứng dụng Zend Framework (Zend_Log) không? Tôi có nên đặt đăng nhập vào bộ điều khiển hoặc trong mô hình không? Hay cả hai?Đăng nhập vào MVC (Khung công tác Zend)

Nếu trong cả hai, chúng có cùng trình ghi nhật ký hoặc một trình ghi riêng biệt không?

Trả lời

8

Thực hiện theo các nguyên tắc Information Expert trong hướng dẫn GRASP cho thiết kế hướng đối tượng:

... đặt một trách nhiệm trong lớp học với các thông tin mới nhất cần thiết để hoàn thành nó.

Vì vậy, bạn sẽ ghi vào nhật ký từ lớp chứa dữ liệu bạn cần đăng nhập. Nếu sự kiện bạn muốn đăng nhập liên quan đến công việc của mô hình, sau đó ghi vào nhật ký trong mô hình. Nếu sự kiện muốn đăng nhập liên quan đến công việc của bộ điều khiển, sau đó ghi vào nhật ký trong bộ điều khiển.

Tạo một đầu ra nhật ký cho một ứng dụng. Nếu không, bạn sẽ phải truy tìm nhiều tệp nhật ký để tìm bất kỳ thông tin chẩn đoán nào! Bạn có thể lưu trữ đối tượng nhật ký trong Zend_Registry để bạn có thể gọi nhật ký từ bất kỳ lớp nào trong ứng dụng của mình.


Re bình luận của bạn:

Tốt hơn để chỉ thất bại một cách duyên dáng nếu logger không được tìm thấy dưới khóa registry dự kiến. Bởi thất bại duyên dáng tôi có nghĩa là một trong hai đầu ra một lỗi để stdout (đến trang web) hoặc stderr (để đăng nhập máy chủ httpd), hoặc ném một ngoại lệ và để cho các ứng dụng xử lý nó.

Đối với phụ thuộc, đây không phải là vấn đề. Bất cứ khi nào một lớp sử dụng một lớp khác, bạn có một loại phụ thuộc tương tự. Xem mẫu thiết kế Registry.

+0

Nhưng với trình ghi nhật ký được lấy từ sổ đăng ký, mô hình có phụ thuộc "ẩn" mới. Nếu tôi sử dụng mô hình trong một ứng dụng khác - có lẽ không cần đăng nhập hoặc lưu trữ dưới một khóa khác - sau đó cố gắng để có được trình ghi nhật ký sẽ không thành công. Vì vậy, tất cả các mô hình của tôi nên phân lớp một mô hình cơ sở có chứa các phương thức như log(), setLogger(), getLogger()? Hay chỉ là quá mức cần thiết? –

+0

Rất hữu ích, cảm ơn rất nhiều. ;-) –

6

Đồng ý với Bill Karwin's comment, tôi cũng sẽ sử dụng đầu ra nhật ký duy nhất nhưng cũng tận dụng khả năng filter errors based on priority (ví dụ: cũng có trình ghi Firebug có thể được thiết lập dễ dàng).

Trong ứng dụng chính của chúng tôi, chúng tôi có một trình soạn thảo db (được chuyển thành nguồn cấp dữ liệu RSS ở trang phụ trợ đơn giản) cũng được sử dụng làm nhật ký chính và email cho các lỗi nghiêm trọng. Rất tiện dụng cho dữ liệu có thể sắp xếp và thu thập số liệu thống kê.

Các vấn đề liên quan