2008-11-12 31 views
7

Tôi đang ghi dữ liệu sự kiện vào tệp nhật ký trong một người đăng ký asp.net bằng cách sử dụng phương thức File.AppendAllText. Tôi quan tâm đến những gì sẽ xảy ra khi nhiều yêu cầu được nhận đồng thời. AppendAllText có khóa tệp mà nó đang ghi vào không?Viết vào một tệp nhật ký trong ASP.NET

Trả lời

6

không, bạn nên có đối tượng khóa tĩnh bảo vệ ghi nhật ký tệp, ví dụ:

public static object LockingTarget = new object(); 

public void LogToFile(string msg) 
{ 
    lock(LockingTarget) 
    { 
     //append to file here as fast as possible 
    } 
} 
+1

Chú ý đến IIS WebGarden. AFAIK bạn có quá trình khác nhau -> đối tượng tĩnh khác nhau. Vì vậy, yon có thể nhận được một cuộc xung đột đồng thời. –

+0

Fabrizio là đúng, tất cả các cược sẽ tắt nếu bạn đang sử dụng một trang trại; tôi đề nghị đăng nhập vào cơ sở dữ liệu thay vì trong trường hợp đó. Có thể bạn không muốn 50 máy chủ cố gắng ghi vào cùng một tệp văn bản! –

1

Bạn có thể sử dụng My.Log để ghi vào tệp nhật ký.

Chỉnh sửa: Nếu bạn sử dụng FileLogTraceListener, trình nghe đó là an toàn chỉ.

Làm điều này cũng cho phép bạn kiểm soát và định cấu hình ghi nhật ký thông qua tệp web.config.

8

Tôi khuyên bạn nên sử dụng TextWriterTraceListener thay vì cố gắng tự quản lý bản thân này.

Nó rất đơn giản để cài đặt và sử dụng:

TextWriterTraceListener logListener = new TextWriterTraceListener("C:\log.txt", "My Log Name"); 
Trace.Listeners.Add(logListener); 

Và sau đó đăng nhập cái gì đó:

Trace.WriteLine("Log this text"); 

Nó rất đơn giản để sử dụng và cũng có rất nhiều loại khác nhau của thính giả cho SQL , Nhật ký sự kiện, tệp văn bản, v.v. Vì vậy, bạn sẽ không phải điều chỉnh mã của mình nếu muốn thay đổi người nghe.

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