Có thể có 2 ứng dụng ghi vào cùng một tệp nhật ký bằng log4net không?log4net, có thể 2 ứng dụng ghi vào cùng một tệp nhật ký không?
Trả lời
Chúng có thể nhưng nếu một ứng dụng đang ghi tệp, ứng dụng khác rất có thể sẽ gặp lỗi nếu cần ghi vào nhật ký do thực tế ứng dụng đầu tiên sẽ giữ tệp mở để ghi . Nó luôn luôn là tốt nhất để có các nguồn đăng nhập chuyên dụng cho các ứng dụng của bạn - nếu bạn cần chia sẻ một bản ghi, hãy sử dụng một cơ sở dữ liệu vì nó được thiết kế để xử lý các ghi đồng thời.
Đây là một trong những điều sẽ hoạt động thực sự tốt trên máy tính của bạn khi bạn đang phát triển vì bạn không có khả năng tạo đủ đồng thời ghi vào tệp nhật ký để thông báo bất kỳ vấn đề nào. Khi ứng dụng của bạn bắt đầu gặp phải sự cố tải trọng nhiều hơn, vấn đề sẽ bắt đầu tự hiển thị và tại thời điểm đó, nó có thể tự biểu hiện theo những cách kỳ lạ. Tôi chắc chắn sẽ thử một giải pháp khác.
Tùy thuộc vào số LockingModel của FileAppender. Nếu đó là ExclusiveLock thì một quy trình khác không thể mở tệp để ghi. Cách thay thế là MinimalLock, nhưng nó không có nghĩa là cho mục đích này. Nó được thiết kế để cho phép một quá trình khác di chuyển hoặc xóa tệp.
MinimalLock giải quyết một phần vấn đề (như @Mark đã đề cập), nhưng nếu bạn đang sử dụng RollingFileAppender, bạn sẽ gặp phải các sự cố khác. Khi tệp cuộn, bạn có thể thấy mình đang ở trong tình trạng chạy đua, trong đó một quá trình sẽ ghi đè tệp nhật ký mới được tạo của quy trình khác.
Các tùy chọn khác bao gồm RemoteLogger, nơi bạn có một máy chủ đơn giản được thiết lập để nhận và ghi lại các sự kiện ghi nhật ký được gửi bởi các quy trình khác. Tương tự, bạn có thể đăng nhập vào cơ sở dữ liệu SQL. Tôi đã viết một cách đơn giản nối thêm vào Redis; bạn cần một ứng dụng đơn giản để đọc từ Redis và ghi vào một tệp. Vấn đề với những cách tiếp cận này là tất cả họ đều đưa ra một điểm thất bại. Khi một cái gì đó không hoạt động bình thường thì thường là khi bạn cần các bản ghi nhiều nhất, và sau đó chúng có thể không có sẵn.
Vì vậy, giải pháp của tôi là tránh vấn đề hoàn toàn bằng cách có mỗi quá trình đăng nhập vào tệp riêng của nó. Điều này dễ thực hiện với thay đổi về cấu hình. Trong cấu hình (Rolling)FileAppender
của bạn, sử dụng:
<file type="log4net.Util.PatternString" value="c:\mylog-[%processid].txt" />
ID tiến trình trở thành một phần của tên tệp. Có, điều này có nghĩa là bây giờ bạn có một số tệp nhật ký để lược bỏ, nhưng một trình tổng hợp tệp nhật ký như Graylog, Splunk hoặc Logscape có thể trợ giúp.
Hoặc bạn có thể sử dụng Mutex để khóa tài nguyên chung và do đó đồng bộ hóa quyền truy cập vào tệp nhật ký chung từ các quy trình khác nhau.
Có, có thể, như đã nêu ở trên, nhưng bây giờ tôi đã thực hiện một số thử nghiệm ứng suất trong trường hợp này.
Quá trình cài đặt khá đơn giản:
- dự án Web 1 thiết lập với một trang đăng nhập một mục đơn + một nút có thể tạo nên 1000 yêu cầu đến cùng một trang, với một bộ đếm trong URL (được chọn bởi câu lệnh đăng nhập).
- Dự án web 2 được thiết lập giống hệt nhau, đối với cùng một tệp nhật ký.
Khi cả hai nút được nhấp cùng một lúc, các mục nhập nhật ký được xen kẽ trong suốt nhật ký. NHƯNG, và đây là GOTCHA lớn, được đánh giá bởi bộ đếm yêu cầu kèm theo, rõ ràng là có điều kiện chủng tộc. Hầu như mỗi lần một dự án web thành công trong việc ghi nhật ký, một dự án khác không thành công (mục nhập bị bỏ qua).
Vì vậy, với lưu lượng truy cập tốt đối với nhật ký phổ biến này, về cơ bản bạn sẽ không đảm bảo về các báo cáo nhật ký nào thực sự kết thúc trong nhật ký. Kết luận là luôn có các tệp nhật ký cụ thể của dự án.
Kiểm tra được thực hiện với mặc định là "MinimalLock". Tôi cũng làm lại bài kiểm tra với "ExclusiveLock", chỉ để thấy rằng dự án web đầu tiên định cấu hình trình ghi nhật ký "thắng", về cơ bản khóa tất cả các yêu cầu khác để đăng nhập. Vì vậy, rõ ràng, đó là một không-đi là tốt.
- 1. ghi nhật ký log4net không tạo tệp nhật ký
- 2. Tôi có thể ghi tệp nhật ký log4net của mình vào dưới ClickOnce ở đâu?
- 3. Sử dụng log4net để ghi vào nhật ký khác nhau
- 4. Log4net không thể ghi, chỉ tạo các tệp rỗng, nhưng không ghi nhật ký thực tế
- 5. log4Net tệp nhật ký không viết
- 6. Quartz.Net - Ghi nhật ký chung với log4net
- 7. ghi vào nhật ký IIS từ một ứng dụng ASP.NET
- 8. Log4net, cách ghi nhật ký tiết?
- 9. log4net không ghi nhật ký cho đến khi ứng dụng đóng
- 10. log4net không ghi nhật ký các câu lệnh gỡ lỗi
- 11. Có ứng dụng bộ nhớ log4net không?
- 12. Ghi nhật ký ngoại lệ bằng cách sử dụng Log4Net
- 13. Liệu python logging.handlers.RotatingFileHandler có cho phép tạo một tệp nhật ký có thể ghi nhóm không?
- 14. ghi nhật ký ứng dụng web2py
- 15. Ghi nhật ký cụ thể cho ứng dụng JBoss AS6
- 16. Cách bật/tắt ghi nhật ký bằng Log4net
- 17. Cách bật ghi nhật ký địa chỉ IP với Log4Net
- 18. NLog: không thể ghi vào nhật ký sự kiện
- 19. Ghi nhật ký Python nhiều tệp bằng cùng một trình ghi
- 20. Cách định cấu hình nhật ký hệ thống để nhật ký ứng dụng truy cập vào một tệp cụ thể
- 21. Điều gì cần ghi vào tệp nhật ký?
- 22. Ghi nhật ký các ứng dụng web Java?
- 23. log4net: Cách đặt tên tệp nhật ký động?
- 24. Ghi nhật ký * Kinh doanh * Sự kiện - sử dụng khung ghi nhật ký?
- 25. Đọc dữ liệu từ một tệp nhật ký dưới dạng một ứng dụng riêng biệt được ghi vào nó
- 26. log4net không thể tạo tệp nhật ký, khi xuất bản lên máy chủ
- 27. Tôi có thể tắt tiêu đề nhật ký cho trình ghi nhật ký ruby không?
- 28. Sử dụng log4net làm cơ chế ghi nhật ký cho SSIS?
- 29. Log4Net định cấu hình cấp nhật ký
- 30. Ghi nhật ký Python.DEBUG không ghi nhật ký
Có ai có kinh nghiệm chia sẻ về phương pháp này không? – SandRock