2016-07-31 19 views
8

Tôi cố gắng để xử lý một ngoại lệ Enterprise Library 6 LogWriter rằng thời gian gần đây đã xuất hiện bất ngờ sau khi nâng cấp từ Enterprise Library 4 đến 6.Cách kiểm tra xem LogWriter đã được đặt chưa?

tôi hoặc là nhận được:

Các LogWriter chưa được đặt ra cho Logger lớp tĩnh. Đặt nó gọi phương thức Logger.SetLogWriter.

HOẶC

Các LogWriter đã được thiết lập.

... tùy thuộc vào tình huống.

Vấn đề là nó ném một InvalidOperationException mà dường như quá chung chung để xử lý, và rằng ngay cả việc kiểm tra sử dụng

if (Logger.Writer == null) 

... cũng mang lại một ngoại lệ, vậy làm thế nào người ta sẽ sau đó kiểm tra nếu tác giả là đặt hay không?

+0

Âm thanh như bạn đang phải đảm bảo nó được thiết lập đúng một lần thay vì kiểm tra tài sản. Tại sao điều đó không hoạt động? – usr

+0

[this] (https://entlib.codeplex.com/discussions/442089) dường như xử lý sự cố của bạn – lokusking

Trả lời

1

Cảm ơn câu trả lời và nhận xét.

Tôi đã xem xét mã của dự án và thấy rằng không có gì được tích hợp sẵn để hỗ trợ điều này.

Mặc dù dự án không còn được phát triển nữa, tôi đã nắm lấy cơ hội và đăng một feature request.

kịch bản tốt nhất để đạt được yêu cầu này sẽ được forking tải nó và thêm logic đó sẽ kiểm tra và xác định thêm trường hợp ngoại lệ cụ thể (xem yêu cầu tính năng):

LogWriterNotSetExceptionLogWriterAlreadySetException

EDIT

Gây mất sức mạnh vì điều đó sẽ có ý nghĩa cấp phép. Quyền sở hữu chưa được chuyển cho Khối ứng dụng ghi nhật ký. Only Unity and Prism have been transferred.

Theo một comment on the notice about the future of Unity, từ một thành viên P & P:

Đối với Logging Application Block, chúng ta xem xét nó được superceded bởi Logging Semantic (trước đây là Logging Semantic Application Block hoặc Slab).

https://github.com/mspnp/semantic-logging

Nói cách khác, chúng ta không có ý định làm việc trên các ứng dụng Logging Block và chúng tôi không có kế hoạch để chuyển nó cho chủ sở hữu mới.

cược Vì vậy, tốt nhất cho bất cứ ai làm việc trên một cái gì đó mới được thử Semantic Logging

2

Theo this CodePlex discussion,

Các hành vi boostrapping của doanh nghiệp Thư viện đã thay đổi trong phiên bản 6. Tác động đối với Logger mặt tiền tĩnh là bạn cần phải thiết lập các nội LogWriter (ví dụ khi khởi động ứng dụng)

Nếu bạn đang ở trong một kịch bản ứng dụng web, Application_Start() là cách tốt để làm như vậy:

protected void Application_Start() 
{ 
    Logger.SetLogWriter(new LogWriterFactory().Create()); 
} 

Nếu không, hãy thiết lập mọi thứ trong phương thức Main() (hoặc một nơi nào đó xung quanh nó - ví dụ: trong quá trình khởi tạo vùng chứa).

+0

Đây là cách để thực hiện. Nếu bạn đặt nó một lần ở đây, sẽ không có câu hỏi về việc nó có được đặt hay không. – Sinaesthetic

+0

Cảm ơn câu trả lời nhưng vẫn không trả lời được câu hỏi. – user919426

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