2008-09-27 32 views
15

Tôi nghĩ rằng tôi có thể thiếu điểm có khung đăng nhập cho ứng dụng của bạn. Trong tất cả các ứng dụng nhỏ, tôi luôn viết một lớp "Đăng nhập" nhỏ và chỉ chuyển các thông điệp tường trình vào một phương thức trong đó được ghi vào một tệp.Điểm của việc sử dụng khung công tác Ghi nhật ký là gì?

Mục đích của khung đăng nhập của bên thứ 3 như log4net là gì? Có an toàn chủ đề với các hoạt động ghi nhật ký hay tôi đang thiếu thứ gì đó?

Trả lời

18

Đó là một câu hỏi hay.

Lý do đầu tiên là "tại sao không?" Nếu bạn đang sử dụng một khung đăng nhập, thì bạn sẽ gặt hái những lợi ích bảo trì của việc sử dụng một cái gì đó đã được đóng gói.

Lý do thứ hai là ghi nhật ký là tinh tế.Các chủ đề, phiên, lớp và đối tượng khác nhau đều có thể được phát trong quá trình ghi nhật ký và bạn không muốn phải tìm ra vấn đề này khi đang di chuyển.

Lý do thứ ba là bạn có thể tìm thấy nút cổ chai hiệu suất trong mã của mình. Nhận ra rằng mã của bạn chậm vì bạn đang viết vào một tập tin không có đệm hoặc ổ đĩa cứng của bạn đã hết dung lượng đĩa vì trình ghi nhật ký không rollover và nén các tệp cũ có thể là một cơn đau ở cổ.

Lý do thứ tư là bạn có thể muốn nối thêm vào nhật ký hệ thống, hoặc ghi vào cơ sở dữ liệu, hoặc vào ổ cắm hoặc các tệp khác. Các khung có chức năng này được tích hợp sẵn.

Nhưng thực sự, câu trả lời đầu tiên là câu trả lời hay nhất; có rất ít lợi ích khi viết của riêng bạn và một loạt các hạn chế.

3

bạn có thể muốn chuyển sang đăng nhập vào một db cho một số tin nhắn, hoặc một hệ thống cảnh báo rằng các trang người nghèo hỗ trợ

Quan trọng hơn, mặc dù hầu hết các khuôn khổ khai thác gỗ cho phép bạn chỉ định LogLevel của các tầng lớp khác nhau để bạn không cần phải cắt một nhị phân mới mỗi lần bạn muốn biết thêm/ít khai thác gỗ (mà tiết đăng nhập cho các lỗi mà bạn vừa phát hiện trong sản xuất)

Log4Net's site có chi tiết hơn

1

Tùy thuộc vào cách thông minh thực hiện hệ thống đăng nhập của bạn Là.

Trong java, nếu bạn muốn kế thừa các loại nhật ký, v.v., có thể quá phức tạp và bạn muốn có một công cụ của bên thứ ba như Log4J. Tôi cho rằng có những điều tương tự cho C#. Tương tự như vậy nếu bạn muốn xác định mức độ đăng nhập từ dòng lệnh.

Nếu bạn chỉ muốn định tuyến tất cả các System.out của bạn và kiểm soát xem chúng được in bất cứ khi nào bạn biên dịch, logger của riêng bạn sẽ làm tốt.

2

Bằng chữ: linh hoạt. Log4xxx cung cấp cho bạn khả năng thực hiện các mức đăng nhập khác nhau, để ghi lại các mô-đun mã khác nhau cho các tệp khác nhau và bạn có thể phụ thuộc vào nó để có thể tin cậy bất kể tình huống lạ xảy ra (logger của bạn sẽ làm gì nếu đĩa hết dung lượng ?)

2

Một số nhận xét khác đã bị bỏ qua: nếu đã có thư viện làm những gì bạn muốn, nó giúp bạn tiết kiệm phải viết mã.

Có thể bạn đang chơi ngữ nghĩa ở đây: với tôi, "khung đăng nhập" thường là ít hơn một lớp ghi thông điệp tường trình vào tệp ... khuôn khổ. Do bạn đã làm như vậy, rõ ràng có một số điểm trong "sử dụng khung công tác ghi nhật ký"! Cuối cùng, bạn sẽ cần phải chắc chắn rằng nó xử lý đồng thời đăng nhập chính xác (khóa dòng đầu ra), có thể đăng nhập vào một tập tin, syslog, vv, có thể làm đăng nhập lăn, và như vậy. Bạn có thể tiết kiệm cho mình nỗ lực đó bằng cách sử dụng mã được thử nghiệm của người khác.

1

Các khung đăng nhập cung cấp tính linh hoạt và ngăn bạn phát minh lại bánh xe. Tôi biết nó chết não đơn giản để thêm vào một tập tin trong bất kỳ ngôn ngữ hiện đại, nhưng nhà của bạn phát triển logger có nhiều mục tiêu? Bạn có thể bật và tắt ghi nhật ký tại thời gian chạy không? Tại sao rủi ro lốp xe phẳng khi các bánh xe này có sẵn miễn phí?

+0

"não chết đơn giản để nối thêm vào một tệp" - so với đa luồng và đặc biệt là đa lõi trong đó các luồng thực sự thực thi cùng một lúc? ETW của Microsoft cung cấp cho mỗi bộ xử lý-đệm của ETW-mục, mà nó có vẻ với tôi là giải pháp lý tưởng. – pngaz

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