2008-08-21 34 views
11

Tôi đã tìm ra cách chuyển đổi lỗi thành ngoại lệ và tôi hiển thị chúng một cách độc đáo nếu chúng không bị bắt, nhưng tôi không biết cách đăng nhập chúng theo cách hữu ích. Đơn giản chỉ cần viết chúng vào một tập tin sẽ không hữu ích, phải không? Và bạn sẽ có nguy cơ truy cập vào một cơ sở dữ liệu, khi bạn không biết những gì gây ra ngoại lệ chưa?Làm cách nào để đăng nhập ngoại lệ không bị bắt buộc trong PHP?

Trả lời

5

Tôi thực sự thích log4php để đăng nhập, mặc dù nó chưa được ra khỏi lồng ấp. Tôi sử dụng log4net chỉ là về tất cả mọi thứ, và đã tìm thấy phong cách khá tự nhiên đối với tôi.

Đối với sự cố hệ thống, bạn có thể đăng nhập lỗi tới nhiều đích (ví dụ: có các ứng dụng có ngưỡng là TIÊU CHUẨN hoặc L ERI mà chỉ phát khi gặp sự cố). Tôi không chắc làm thế nào không an toàn các appenders hiện tại là - nếu cơ sở dữ liệu là xuống, làm thế nào mà appender thất bại? - Nhưng bạn có thể khá dễ dàng viết appender của riêng bạn sẽ thất bại nếu nó không thể đăng nhập.

+0

log4php có chức năng tuyệt vời nhưng đối với tôi, nó hoạt động rất chậm! – JohnM2

+0

Bây giờ nó nằm ngoài lồng ấp và URL đã thay đổi thành http://logging.apache.org/log4php/ – Mike

11

Bạn có thể sử dụng set_error_handler để đặt ngoại lệ tùy chỉnh để ghi lại lỗi của mình. Tôi muốn xem xét lưu trữ chúng trong cơ sở dữ liệu như backtrace mặc định của Exception handler có thể cung cấp thông tin về nguyên nhân gây ra nó - dĩ nhiên điều này sẽ không thể thực hiện được nếu trình xử lý cơ sở dữ liệu kích hoạt ngoại lệ.

Bạn cũng có thể sử dụng error_log để ghi lại lỗi của mình. Nó có một sự lựa chọn các điểm đến thông điệp bao gồm:

Quoted from error_log

  1. system logger của PHP, sử dụng cơ chế hệ thống đăng nhập của hệ điều hành hoặc một tập tin, tùy thuộc vào những gì chỉ thị cấu hình error_log được thiết lập để. Đây là tùy chọn mặc định.
  2. Gửi qua email đến địa chỉ trong thông số đích. Đây là loại thông báo duy nhất có tham số thứ tư, các extra_header được sử dụng.
  3. Được thêm vào đích của tệp. Một dòng mới không được tự động thêm vào cuối chuỗi tin nhắn.

Chỉnh sửa: Nhãn hiệu có thẻ không có dấu gạch dưới cho dấu gạch dưới không?

3

Chỉ cần viết chúng vào một tệp sẽ không hữu ích, đúng không?

Nhưng tất nhiên - đó là điều tuyệt vời để làm, tốt hơn nhiều so với hiển thị chúng trên màn hình. Bạn muốn hiển thị cho người dùng một màn hình đẹp có nội dung "Rất tiếc, chúng tôi đã bị lỗi. Kỹ sư đã được thông báo. Hãy quay lại và thử lại" và TUYỆT ĐỐI KHÔNG CÓ CHI TIẾT KỸ THUẬT, vì làm như vậy sẽ là một nguy cơ bảo mật. Bạn có thể gửi email đến một hộp thư được chia sẻ và ghi lại ngoại lệ cho tệp hoặc DB để xem xét sau. Đây sẽ là phương pháp hay nhất.

0

Tôi nghĩ điều đó phụ thuộc rất nhiều nơi xảy ra lỗi của bạn. Nếu DB không đăng nhập vào DB thì không có ý tưởng tốt;)

Tôi sử dụng chức năng syslog() để ghi lỗi, nhưng tôi không gặp khó khăn khi ghi vào tệp khi tôi đang sử dụng hệ thống không có hỗ trợ syslog. Bạn có thể dễ dàng thiết lập hệ thống của mình để gửi cho bạn một email hoặc một tin nhắn jabber sử dụng ví dụ logwatch hoặc the standard syslogd.

1

Tôi muốn ghi chúng vào một tệp - và có thể thiết lập hệ thống giám sát để kiểm tra các thay đổi đối với ngày được sửa đổi hoặc sửa đổi lần cuối. Webmin là một cách dễ dàng, nhưng có nhiều giải pháp phần mềm hoàn chỉnh hơn.

Nếu bạn biết lỗi một lần của nó, sau đó gửi email thông báo có thể không sao. Tuy nhiên, với trang web nhiều lần truy cập mỗi phút, không bao giờ gửi email thông báo. Tôi đã nhìn thấy một trang web được đưa xuống bằng cách có hàng trăm email mỗi phút được tạo ra để nói rằng hệ thống không thể kết nối với cơ sở dữ liệu. Thực tế là nó cũng có một LoadAvg> 200 vì máy chủ thư đang chạy cho mọi thư mới, không giúp gì cả. Trong trường hợp đó, kịch bản tốt nhất là, cho đến nay và đi xa, cơ quan giám sát kiểm tra các tập tin và kết nối với một dịch vụ bên ngoài để gửi một tin nhắn SMS (có thể là IM), hoặc có một hệ thống bên ngoài nhìn vào một trang web cho một thông báo lỗi (không cần phải hiển thị trên màn hình - nó có thể nằm trong nhận xét HTML).

0

Tôi log4php thứ hai. Tôi thường có nó được cấu hình để gửi những thứ như ngoại lệ cho ERROR hoặc CRITITCAL và gửi chúng tới syslog. Từ đó, bạn có thể có nguồn cấp dữ liệu nhật ký hệ thống của mình thành Zenoss, Nagios, Splunk hoặc bất kỳ điều gì khác mà nhật ký hệ thống có thể nói chuyện.

0

Bạn cũng có thể nắm bắt và ghi lại ngoại lệ PHP bằng Google Biểu mẫu. Có một hướng dẫn here giải thích quy trình.

+5

+1 để đề xuất thêm vào sự độc quyền đã có của Google đối với dữ liệu quan trọng của bạn. –

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