Vì vậy, chúng tôi có một hệ thống đăng nhập, nơi chúng tôi sử dụng Log.Info
và nó ghi vào một ILogger
.ThreadLocal và chờ
Bây giờ, chúng tôi có nhiều công nhân chạy ở chế độ nền và chúng tôi muốn các công việc này ghi vào nhật ký của riêng họ. Vì vậy, mọi thứ được đóng gói cho mỗi Công nhân. Mọi thứ được ghi lại khi tác vụ này đang được thực thi sẽ được chuyển tiếp tới trình ghi nhật ký riêng của nó.
Chúng tôi đang suy nghĩ về cách tạo phương thức Log.SetLoggerForCurrentThread, triển khai nó bằng ThreadLocal. Mã thực hiện sẽ giống như thế này:
public class Worker
{
ILogger _Logger;
public void ExecuteTask()
{
Log.Info("This goes to the 'Global' logger");
using (Log.SetLoggerForCurrentThread(_Logger))
{
Log.Info("This goes to local logger");
DoWork();
}
}
private async void DoWork()
{
Log.Info("Starting...");
// SomeMethod does some logging,
// that also needs to be forwared to the local logger
var value = await SomeDeepDomainClass.SomeMethod();
// if we use ThreadLocal, and this thread has been reused,
// it could be a completely different logger that is now attached.
Log.Info("Ended...");
}
}
Câu hỏi
- Khi chúng tôi sử dụng chờ đợi, thread có thể về mặt lý thuyết quá trình làm việc trên công nhân khác, do đó trộn lên logger địa phương.
- Mô hình tốt nhất để làm điều gì đó tương tự? Tôi có thể sử dụng phương pháp lưu trữ nào?
- Làm cách nào để
CultureInfo
xử lý việc này?
Thông tin cơ bản
Hầu hết các công nhân sẽ chạy trong một thể hiện Azure WorkerRole, nhưng bây giờ và hơn họ cũng được kích hoạt (một lần) từ một ứng dụng Console.
'CultureInfo' được thiết lập vào đầu mỗi thread quản lý - đó là độc lập của 'Task'. Tôi khuyên bạn nên sử dụng rõ ràng 'Log.SetLoggerForCurrentThread' nếu bạn muốn đăng nhập từ một' Task'. Nó cho thấy bạn đã suy nghĩ rõ ràng về điều này và được đền bù. –
Trước khi tôi bắt đầu làm việc trên một câu trả lời, bạn nên biết rằng log4net là miễn phí và giải quyết hầu hết các vấn đề của bạn rồi. –
Xin chào @GuillaumeCR, bạn có thể đúng, nhưng xem nó như một câu hỏi lập trình chung cho các mẫu tương tự. –