Tôi đang cố gắng tìm ra chiến lược tốt nhất để đăng nhập vào máy chủ web async-IO mà tôi đang làm việc. Tôi nghĩ cách đơn giản nhất là có một lớp singleton giúp Filestream mở cho các tệp nhật ký phù hợp để tôi có thể làm một cái gì đó như:C# Singleton Logging Class
Util.Logger.GetInstance().LogAccess(str);
Hoặc tương tự.
Lớp học của tôi trông như thế này:
public sealed class Logger {
private static StreamWriter sw;
private static readonly Logger instance = new Logger();
private Logger() {
sw = new StreamWriter(logfile);
}
public static Logger GetInstance() {
return instance;
}
public void LogAccess(string str) {
sw.WriteLine(str);
}
}
Đây là tất cả chỉ là trong đầu tôi thực sự, và tôi đang tìm gợi ý về cách để làm cho nó tốt hơn và cũng chắc chắn rằng tôi đang làm nó đúng cách. Điều lớn nhất là tôi cần nó để được thread an toàn, mà rõ ràng là nó không phải là ở trạng thái hiện tại của nó. Không chắc chắn cách tốt nhất để làm điều đó.
Bạn đang sử dụng. NET 4, perchance? Thư viện async mới có thể giúp bạn. (Tôi cũng sẽ có cơ hội để chỉ ra cách thanh lịch này sẽ được thực hiện trong F #, và nghỉ phép của tôi!) –
Giá trị của việc sử dụng Singleton so với chỉ sử dụng phương pháp tĩnh là gì? – kyoryu
Tôi thích thực tế bạn muốn tự mình thử. Việc ghi nhật ký không khó để xây dựng nhưng tạo ra một cách hay để xử lý luồng là một thách thức. Các khung công tác được đề xuất đều ổn, nhưng tự tạo ra nó sẽ mang lại cho bạn cơ hội tốt để tìm hiểu và làm việc với thread-safety. Nó thực sự trở nên khó khăn nếu bạn muốn nhiều ứng dụng (hoặc trong các hồ bơi ứng dụng ASP.NET/máy chủ) ghi vào cùng một tệp, bởi vì trong trường hợp đó chỉ an toàn chỉ là không đủ. – Gertjan