2010-05-06 21 views
7

TickZoom là một ứng dụng hiệu suất rất cao sử dụng thư viện song song riêng của nó và nhiều luồng O/S để sử dụng trơn tru các máy tính đa lõi.Ghi vào file log4net FileAppender với nhiều chủ đề về hiệu năng

Ứng dụng truy cập nút cổ chai nơi người dùng cần ghi thông tin vào LogAppender từ các chuỗi O/S riêng biệt.

FileAppender sử dụng tính năng MinimalLock để mỗi chủ đề có thể khóa và ghi vào tệp và sau đó nhả nó cho chuỗi tiếp theo để ghi.

Nếu MinimalLock bị vô hiệu hóa, log4net báo cáo lỗi về tệp đang bị khóa bởi một quy trình (chuỗi) khác.

Cách tốt hơn để log4net thực hiện việc này là phải có một chuỗi duy nhất xử lý văn bản cho FileAppender và bất kỳ chủ đề nào khác chỉ cần thêm thông điệp của họ vào hàng đợi.

Bằng cách đó, MinimalLock có thể bị tắt để cải thiện đáng kể hiệu suất ghi nhật ký. Ngoài ra, ứng dụng thực hiện rất nhiều công việc chuyên sâu của CPU để nó cũng sẽ cải thiện hiệu suất sử dụng một luồng riêng biệt để ghi vào tệp để CPU không bao giờ đợi I/O hoàn tất.

Vì vậy, câu hỏi là, liệu log4net đã cung cấp tính năng này chưa? Nếu vậy, làm thế nào để bạn kích hoạt tính năng viết luồng cho một tập tin? Có một appender cao cấp hơn, có lẽ?

Nếu không, thì vì log4net đã được gói trong nền tảng, nên có thể thực hiện một chuỗi và hàng đợi riêng biệt cho mục đích này trong mã TickZoom.

Trân trọng, Wayne

EDIT:

Nhờ có vẻ như câu trả lời chỉ để phát triển giải pháp của riêng của chúng tôi như có lẽ một phần mở rộng để log4net một cách nào đó. Và họ cho thấy rõ ràng log4net không làm điều này.

Hơn nữa, chúng tôi mới nhận ra rằng chúng tôi có thể "lạm dụng" hệ thống ghi nhật ký chủ yếu dành cho thông điệp có thể đọc được của con người để thông báo sự kiện quan trọng hoặc thông tin gỡ lỗi. Phần đặc biệt này của đầu ra phần mềm chỉ thực sự được sử dụng cho các công cụ tự động xác minh tính chính xác của hệ thống.

Tất nhiên, chúng tôi cũng sử dụng log4net theo cách "bình thường" để gỡ lỗi, cảnh báo và như vậy.

Nhưng chúng giống như "nhật ký giao dịch" hơn là nhật ký thông báo hoặc nhật ký người dùng. Cụ thể hơn, không cần thiết cho các nhật ký này trực tiếp có thể đọc được. Nếu cần thiết một "người xem" của một số loại có thể hiển thị các nội dung dưới dạng ASCII.

Vì vậy, chúng tôi sẽ lập kế hoạch thực hiện các nhật ký loại giao dịch này được ghi vào bộ nhớ nhị phân tốc độ cao.

Cảm ơn dường như cả hai câu trả lời dưới đây đều là những cú hích lớn để phát triển giải pháp của riêng chúng tôi.

Trả lời

7

Log4net không hỗ trợ kịch bản chính xác mà bạn mô tả. Tuy nhiên, nó cung cấp các ứng dụng khác không khóa, như trình bổ sung cơ sở dữ liệu hoặc trình bổ sung UDP.Dưới đây là một vài ý tưởng:

  1. Đăng nhập tin nhắn của bạn một tin nhắn hàng đợi, và sau đó có một người đọc (hoặc nhiều độc giả) đọc tin nhắn tắt hàng đợi và viết chúng vào một khúc gỗ. Điều này cung cấp cơ chế đáng tin cậy để gửi/viết tin nhắn. Thành thật mà nói: Tôi không biết nếu đã có một ứng dụng MSMQ , nhưng viết nó bản thân bạn sẽ không quá khó.

  2. Sử dụng trình bổ sung UDP để gửi thư và sau đó viết dịch vụ riêng của bạn để nghe những thông báo này và ghi chúng vào tệp.

Tôi nghĩ bạn có thể phát hiện chủ đề ở đây ... về cơ bản sử dụng một trong những ứng dụng không chặn (hoặc viết của riêng bạn) và triển khai dịch vụ của riêng bạn nhận tin nhắn từ người gửi và viết chúng vào một tệp .

+0

Cảm ơn bạn đã làm rõ rằng không thể thực hiện được trong log4net và cho phép di chuyển về phía giải pháp nội bộ. – Wayne

1

Bạn nên tránh thêm bất kỳ I/O nào vào các chuỗi mục tiêu của mình, vì vậy việc gửi một thông điệp đến chuỗi bộ sưu tập ghi nhật ký là một ý tưởng hay. Tôi cũng đôi khi sử dụng System :: Diagnostics :: Debug :: WriteLine từ chuỗi mục tiêu để loại bỏ đầu ra của nó, nhưng có ràng buộc là một khóa nhỏ bên trong đó anyways. Tất nhiên việc thêm bất kỳ đăng nhập thêm sẽ dẫn đến hiệu ứng "Heisenberg", vì vậy bạn phải bằng cách nào đó biết khi nào những hiệu ứng này là không đáng kể và khi họ không, để có đăng nhập hữu ích của chủ đề hiệu suất cao của bạn. Chúc may mắn!

Nếu bạn muốn có chút ít tiền hơn, bạn có thể yêu cầu mỗi chủ đề lưu danh sách thư của riêng mình, sau đó đổ nó ra đâu đó sau nhiều lần lặp lại. Vì vậy, dữ liệu sẽ chỉ hữu ích trong khoảng thời gian trước khi bất kỳ luồng nào ghi nhật ký I/O của nó, nhưng có thể bạn có thể nắm bắt đủ thông tin để gỡ lỗi của mình. Ngoài ra, bạn sẽ có được nhiệm vụ thú vị khi đối chiếu các bản ghi chủ đề riêng lẻ thành một bản ghi duy nhất để phân tích.

3

Kiểm tra trình ghi của đối tượng Guy để có hiệu suất cao, trình ghi nhật ký an toàn đa luồng với khả năng ghi nhật ký không đồng bộ cũng như nhiều tính năng khác - khá thú vị tôi nghĩ - http://www.theobjectguy.com/DotNetLog/. Xem video đa luồng trên trang này.

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