Tôi đang chuyển đổi từ Prism 2.1 sang Prism 4, và tôi cần phải viết một lớp ILoggerFacade cho Log4Net. Mã cũ của tôi từ Prism 2.1 không còn hoạt động nữa. Có ai có mã mẫu cho một lớp ILoggerFacade họ muốn sẵn sàng chia sẻ? Cảm ơn bạn đã giúp đỡ.Lăng kính 4 ILoggerFacade cho Log4Net?
Trả lời
Tôi đã tìm ra. Rất giống với Prism 2. Đầu tiên, tạo một lớp logger tùy chỉnh thực hiện ILoggerFacade. Đây là lớp học của tôi:
using log4net;
using Microsoft.Practices.Prism.Logging;
namespace FsNoteMaster3
{
class Log4NetLogger : ILoggerFacade
{
#region Fields
// Member variables
private readonly ILog m_Logger = LogManager.GetLogger(typeof(Log4NetLogger));
#endregion
#region ILoggerFacade Members
/// <summary>
/// Writes a log message.
/// </summary>
/// <param name="message">The message to write.</param>
/// <param name="category">The message category.</param>
/// <param name="priority">Not used by Log4Net; pass Priority.None.</param>
public void Log(string message, Category category, Priority priority)
{
switch (category)
{
case Category.Debug:
m_Logger.Debug(message);
break;
case Category.Warn:
m_Logger.Warn(message);
break;
case Category.Exception:
m_Logger.Error(message);
break;
case Category.Info:
m_Logger.Info(message);
break;
}
}
#endregion
}
}
Sau đó, trong lớp Prism 4 Bootstrapper, thêm ghi đè vào CreateLogger()
phương thức trả về một thể hiện mới của lớp tùy chỉnh logger:
protected override Microsoft.Practices.Prism.Logging.ILoggerFacade CreateLogger()
{
return new Log4NetLogger();
}
Lưu ý rằng trong tùy chỉnh lớp logger, ILog
là giao diện Log4Net và LogManager
là đối tượng Log4Net.
Viết cho trình ghi nhật ký tùy chỉnh từ mã của riêng bạn (Lăng kính chăm sóc các mục nhập nhật ký của riêng nó) hơi khác một chút so với trong Prism 2.1. Bạn có thể giải quyết logger trực tiếp từ container IoC, hoặc bạn có thể sử dụng ServiceLocator. Các ServiceLocator
có lợi thế là container-thuyết bất khả tri, có nghĩa là các container bên dưới không thực sự quan trọng. Dưới đây là một ví dụ về giải quyết một logger sử dụng ServiceLocator:
var logger = (Log4NetLogger)ServiceLocator.Current.GetInstance(typeof(ILoggerFacade));
logger.Log("App.OnStartup() completed", Category.Info ,Priority.None);
Các ServiceLocator
đòi hỏi rằng các dự án máy chủ có một tham chiếu đến Microsoft.Practices.ServiceLocation.dll và phù hợp với using
tuyên bố.
- 1. Lăng kính 4 - phạm vi cục bộ RegionManager
- 2. WPF/Lăng kính: Container UNITY là gì?
- 3. Sử dụng lăng kính với Ninject
- 4. Tại sao sử dụng lăng kính?
- 5. Thực hiện đúng NLog và lăng kính
- 6. Lăng kính WPF - Nơi đặt tài nguyên?
- 7. Cách sử dụng .NET 4 SplashScreen trong ứng dụng dựa trên lăng kính WPF?
- 8. AvalonDock với Bộ điều hợp Khu vực lăng kính
- 9. Lỗi tham chiếu lắp ráp lăng kính: System.Windows.Interactivity
- 10. Lăng kính - Ý tưởng tồi để sử dụng?
- 11. Làm thế nào để hạn chế lăng kính 4 chỉ tải các mô-đun được ký đặc biệt?
- 12. Hệ thống mô-đun lăng kính từ bên trong dịch vụ WCF?
- 13. WPF WCF lăng kính và MVVM - cách chính xác để lộ thực thể
- 14. tạo đường viền bán kính cho div
- 15. Có một mô hình log4net cho MachineName
- 16. log4net một tệp cho mỗi lần chạy
- 17. Cách cấu hình log4net cho WCF
- 18. Configure log4net cho dự án asp.net MVC3
- 19. Log4Net và .NET 4.0
- 20. log4Net XmlHierarchyConfigurator
- 21. Ống kính đẳng cấu
- 22. Ống kính chức năng
- 23. Kính cắt Delphi
- 24. Kết hợp ống kính
- 25. Bán kính viền cho tất cả trình duyệt?
- 26. Cách đặt bán kính góc cho nút trong mã java?
- 27. Ống kính được sử dụng/hữu ích cho là gì?
- 28. Cách Áp dụng Bán kính Góc cho LinearLayout
- 29. Bán kính đường viền CSS3 cho Canvas HTML5
- 30. C#: Biểu mẫu kính?
Cảm ơn David này. – JohnC
Cảm ơn bạn, nhưng tại sao bạn truyền nó vào 'Log4NetLogger'? nếu giải pháp ghi nhật ký được thay đổi thì tất cả các phiên bản của trình ghi nhật ký phải được truyền sang một loại khác một lần nữa hoặc xóa bỏ mã trình diễn! – Jalal
Thật vậy, tại sao bạn sẽ bỏ? Nó sẽ ngụ ý rằng bạn sẽ cần một tham chiếu đến hội đồng định nghĩa Log4NetLogger, mà đánh bại toàn bộ mục đích ... – Kris