Một phương pháp đó là khá đơn giản được mô tả trong this message of the mailing list archive
Về cơ bản, với log4net, các file log được tạo ra khi các logger được cấu hình. Để cấu hình nó để làm khác là một chút hacky. Giải pháp là trì hoãn việc thực thi cấu hình. Thông điệp trên gợi ý cách làm như sau khi thiết lập các logger:
private static ILog _log = LogManager.GetLogger(typeof(Program));
public static ILog Log
{
get
{
if(!log4net.LogManager.GetRepository().Configured)
log4net.Config.XmlConfigurator.Configure(new FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
return _log;
}
}
Tôi thường cấu hình log4net với lắp ráp thuộc tính, mà cấu hình logger tự động (do đó tạo ra các log file), và một getter đơn giản cho đăng nhập:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
...
public static log4net.ILog Log { get { return _log; } }
private static readonly log4net.ILog _log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Nhưng loại bỏ điều đó và thêm vào trình thu thập ở trên bằng logic bổ sung thay vì giải quyết vấn đề cho tôi.
Lưu ý: nói chung tôi đồng ý rằng trong hầu hết các trường hợp, cách tốt nhất là định cấu hình trình ghi nhật ký và tạo tệp (và thậm chí ghi vào tệp) khi khởi động ứng dụng.
Đối với bất cứ ai cố gắng để làm theo câu trả lời, tôi tin rằng câu trả lời của Jon Skeet thực sự là một lời nhận xét về câu trả lời này. –
Bạn có thể mô tả phương pháp thứ 2 là do liên kết không hoạt động hay không. Nó là vô nghĩa để đề cập đến rằng một phương pháp là trên liên kết khi liên kết không còn hoạt động. –
Tôi đã sử dụng kỹ thuật này để tạo NoLock. Tình hình của tôi là tôi đã sử dụng cấu hình tệp nhật ký trong ứng dụng web nhưng thực sự viết cho nó trong một dịch vụ cửa sổ có cấu hình tương tự. Ứng dụng web đã khóa tệp và các loại khóa khác nhau Tối thiểu, InterProcess không giúp được gì. Bây giờ ứng dụng web sử dụng cấu hình log4net để hiển thị tất cả tệp nhật ký cho quản trị viên nhưng không khóa tệp thực sự được sử dụng bởi dịch vụ windows. Rất biết ơn bạn vì câu trả lời này. Tôi lãng phí khoảng 5-6 giờ về điều này. –