Tôi làm việc với các hệ thống thời gian thực an toàn quan trọng và ghi nhật ký thường là cách duy nhất để bắt những con bọ hiếm xuất hiện một lần mặt trăng xanh vào mỗi thứ ba thứ 53 khi đó là trăng tròn, nếu bạn bắt gặp sự trôi dạt của tôi. Kiểu này khiến bạn ám ảnh về chủ đề này, vì vậy tôi sẽ xin lỗi ngay bây giờ nếu tôi bắt đầu sùi bọt mép. Phần sau đây được viết cho nhật ký gỡ lỗi mã gốc, nhưng phần lớn nó cũng có thể áp dụng cho thế giới được quản lý ...
Sử dụng tệp nhật ký văn bản. Có vẻ rõ ràng, nhưng một số người cố gắng tạo các tệp nhật ký nhị phân: điều đó thật ngu ngốc vì tôi không cần phải tìm kiếm một công cụ đọc khi tôi ra ngoài thực địa. Ngoài ra, nếu văn bản và gỡ lỗi là dài dòng, rất có khả năng kỹ sư hiện trường có thể đọc tệp và chẩn đoán sự cố mà không bao giờ quay lại với tôi. Mọi người đều thắng.
Tôi thiết kế các hệ thống có khả năng ghi nhật ký khá nhiều thứ, nhưng tôi không bật mọi thứ theo mặc định. Thông tin gỡ lỗi được gửi đến hộp thoại gỡ lỗi ẩn, đánh dấu thời gian và đưa nó vào hộp danh sách (giới hạn trong khoảng 500 dòng trước khi xóa) và hộp thoại cho phép tôi dừng nó, lưu nó vào tệp nhật ký hoặc chuyển hướng nó sang tệp nhật ký một trình sửa lỗi đính kèm. Sự chuyển hướng đó cho phép tôi thấy đầu ra gỡ lỗi từ nhiều ứng dụng được tuần tự hóa gọn gàng, đôi khi có thể là một trình cứu sinh. Tôi đã từng sử dụng các mức ghi nhật ký số (bạn đặt mức càng cao, bạn càng nắm bắt được nhiều hơn):
off
errors only
basic
detailed
everything
nhưng điều này quá không linh hoạt - khi bạn tìm cách khắc phục lỗi, sẽ hiệu quả hơn nhiều khi có thể tập trung đăng nhập vào chính xác những gì bạn cần mà không phải lội qua hàng tấn mảnh vụn và đó có thể là một loại giao dịch hoặc hoạt động cụ thể Điều đó gây ra lỗi. Nếu điều đó đòi hỏi bạn phải bật mọi thứ lên, bạn chỉ đang làm cho công việc của mình trở nên khó khăn hơn. Bạn cần một cái gì đó tốt hơn.
Vì vậy, bây giờ tôi đang trong quá trình chuyển sang đăng nhập dựa trên hệ thống cờ. Mọi thứ được ghi lại đều có một cờ chi tiết loại hoạt động đó là gì và có một bộ hộp kiểm cho phép tôi xác định những gì được ghi lại. Thông thường danh sách đó trông như thế này:
#define DEBUG_ERROR 1
#define DEBUG_BASIC 2
#define DEBUG_DETAIL 4
#define DEBUG_MSG_BASIC 8
#define DEBUG_MSG_POLL 16
#define DEBUG_MSG_STATUS 32
#define DEBUG_METRICS 64
#define DEBUG_EXCEPTION 128
#define DEBUG_STATE_CHANGE 256
#define DEBUG_DB_READ 512
#define DEBUG_DB_WRITE 1024
#define DEBUG_SQL_TEXT 2048
#define DEBUG_MSG_CONTENTS 4096
Hệ thống ghi nhật ký này vận chuyển với bản dựng phát hành , bật và lưu vào tệp theo mặc định. Đã quá muộn để phát hiện ra bạn nên đăng nhập SAU lỗi đã xảy ra, nếu lỗi đó chỉ xảy ra trung bình sáu tháng một lần và bạn không có cách nào để tái tạo nó. Ghi nhật ký chỉ hoạt động với các bản dựng gỡ lỗi là chỉ. trơn. câm.
Phần mềm thường được phát hành với ERROR, BASIC, STATE_CHANGE và EXCEPTION được bật, nhưng điều này có thể được thay đổi trong trường thông qua hộp thoại gỡ lỗi (hoặc cài đặt đăng ký / ini / cfg, trong đó những thứ này được lưu).
Ồ và một điều - hệ thống gỡ lỗi của tôi tạo ra một tệp mỗi ngày. Yêu cầu của bạn có thể khác nhau. Nhưng hãy đảm bảo mã gỡ lỗi của bạn bắt đầu mọi tệp với ngày, phiên bản mã bạn đang chạy và nếu có thể, một số điểm đánh dấu cho ID khách hàng, vị trí của hệ thống hoặc bất cứ điều gì. Bạn có thể nhận được một loạt các tệp nhật ký đến từ trường và bạn cần một số bản ghi về những gì đến từ đâu và phiên bản nào của hệ thống mà họ đang chạy thực sự trong chính dữ liệu và bạn không thể tin tưởng vào khách hàng / kỹ sư lĩnh vực để cho bạn biết họ đã có phiên bản nào - họ có thể chỉ cho bạn biết họ nghĩ phiên bản nào họ có. Tệ hơn, họ có thể báo cáo phiên bản exe trên đĩa, nhưng phiên bản cũ vẫn đang chạy vì họ quên khởi động lại sau khi thay thế. Có mã của bạn cho bạn biết chính nó.
Cuối cùng, bạn không muốn mã của mình phát sinh vấn đề của riêng mình, vì vậy hãy đặt chức năng hẹn giờ để lọc các tệp nhật ký sau nhiều ngày hoặc vài tuần (chỉ cần kiểm tra sự khác biệt giữa thời gian tạo và thời gian tạo tệp). Điều này là ổn đối với một ứng dụng máy chủ chạy mọi lúc, trên ứng dụng phía máy khách, bạn có thể nhận được bằng cách xóa bất kỳ dữ liệu cũ nào khi bạn khởi động. Chúng tôi thường thanh lọc sau 30 ngày hoặc lâu hơn, trên một hệ thống không có các kỹ sư thường xuyên ghé thăm, bạn có thể muốn để nó lâu hơn. Rõ ràng điều này cũng phụ thuộc vào kích thước của tệp nhật ký của bạn.