Tôi đang trong quá trình thực hiện hỗ trợ ghi nhật ký trong thư viện nguồn mở mà tôi đang làm việc. Hầu hết các thư viện của bên thứ ba dường như chọn một cách rõ ràng thư viện khai thác "ưa thích" như Log4Net hoặc NLog v.v ... và sau đó yêu cầu người tiêu dùng thư viện của họ "đối phó với nó". Rất may, chúng tôi có một thư viện như Common.Logging để giải quyết vấn đề này trong (các) ứng dụng tiêu thụ của chúng tôi hợp nhất các triển khai ghi nhật ký thư viện của bên thứ ba này.Triển khai Thư viện nguồn mở: Cách xử lý ghi nhật ký?
Tôi sẽ cố gắng tránh tham chiếu thư viện của bên thứ ba khác từ thư viện nguồn mở của riêng tôi để tránh đưa vào một tham chiếu lắp ráp khác vào ứng dụng của người khác. Có lẽ đây không phải là một mối quan tâm, và tôi nên dừng lại ở đó?
Giả sử rằng một số người đồng ý rằng tham chiếu lắp ráp quá mức gây khó chịu (và vì ai đó sẽ đề cập đến nó), cá nhân tôi không thích sử dụng ILMerge cho loại tình huống này, vì bạn có thể dễ dàng có một số thư viện sử dụng Log4Net và nếu mỗi ILMerged trong hội đồng, nó chỉ là bloating kích thước của một ứng dụng theo ý kiến của tôi.
Để kết thúc, tôi đã nghĩ đến việc triển khai và hiển thị LogBridge để cho phép người dùng thư viện của tôi nối vào cuộc gọi đăng nhập của tôi nếu muốn (sẽ bị tắt theo mặc định). Ngoài ra, hãy để tôi nhấn mạnh rằng tôi không nói về việc triển khai khung đăng nhập của riêng mình, chỉ cần đảm bảo rằng tôi tiếp cận đăng nhập nếu ai đó quan tâm đến việc kết hợp nó. Tôi đã nghĩ rằng việc triển khai tiêu thụ sẽ xuất hiện như sau:
public class SomeSetupClass
{
private void SomeSetupMethod()
{
var log = LogManager.GetLogger("LogSourceName");
var logBridge = new LogBridge()
{
DebugEnabled = log.IsDebugEnabled,
InformationEnabled = log.IsInfoEnabled,
WarningEnabled = log.IsWarnEnabled,
ErrorEnabled = log.IsErrorEnabled,
CriticalEnabled = log.IsFatalEnabled
};
logBridge.DebugMessageReceived += (sender, e) => log.Debug(e.Message);
logBridge.InformationMessageReceived += (sender, e) => log.Info(e.Message);
logBridge.WarningMessageReceived += (sender, e) => log.Warn(e.Message);
logBridge.ErrorMessageReceived += (sender, e) => log.Error(e.Message);
logBridge.CrticalMessageReceived += (sender, e) => log.Fatal(e.Message); }
}
}
Phương pháp này có hợp lý không? Tôi có nghĩ về điều này sau khi đi nghỉ quá lâu và tôi chỉ nên tham khảo Log4Net hoặc NLog v.v ... và được thực hiện với nó? Tôi có thiếu bất kỳ nhược điểm lớn nào của phương pháp này không? API thô có hợp lý không?
Như mọi khi, tò mò những gì mọi người nghĩ ...
Cập nhật
Tò mò nếu mọi người nghĩ rằng giải pháp jgauffin là cách tốt hơn để đi đâu? Tôi đã cho nó một số suy nghĩ trước khi đăng bài này; suy nghĩ của tôi là LogBridge sẽ dễ dàng hơn để kết nối với người tiêu dùng thay vì yêu cầu một giao diện tùy chỉnh được thực hiện trong một dự án tiêu thụ? Suy nghĩ?
Một cái gì đó như thế này có ý nghĩa tốt. Có rất nhiều khung công tác đăng xuất - có một số khung tốt hơn so với các khung công tác khác. Mọi người đều yêu thích. Bằng cách cung cấp một móc tốt đẹp như bạn đang làm, bạn không đẩy bất cứ điều gì xuống cổ họng của bất kỳ ai, và bạn đang cung cấp sự linh hoạt tuyệt vời. – Pedro