2008-11-12 8 views
7

Estoy escribiendo datos de evento en un archivo de registro en un asp.net httphandler utilizando el método File.AppendAllText. Me preocupa lo que sucederá cuando se reciban múltiples solicitudes simultáneamente. ¿AppendAllText bloquea el archivo en el que está escribiendo?Escribir en un archivo de registro en ASP.NET

Respuesta

6

no, debe tener un objeto de bloqueo estático que proteja la escritura del archivo de registro, p.

public static object LockingTarget = new object(); 

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

Preste atención a IIS WebGarden. AFAIK tienes diferentes procesos -> diferentes objetos estáticos. Entonces, podrías tener un conflicto de simultaneidad. –

+0

Fabrizio tiene razón, todas las apuestas están apagadas si está usando una granja de servidores web; sugiero iniciar sesión en la base de datos en ese caso. ¡Probablemente no quieras que 50 servidores intenten escribir en el mismo archivo de texto de todos modos! –

1

Puede usar My.Log para escribir en los archivos de registro.

Editar: Si utiliza el FileLogTraceListener, ese oyente es seguro para subprocesos.

Hacer esto también le permite controlar y configurar el registro a través del archivo web.config.

8

recomiendo el uso de la TextWriterTraceListener en lugar de tratar de manejar este su auto.

Es muy simple de configurar y usar:

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

Y a continuación, para iniciar la sesión algo:

Trace.WriteLine("Log this text"); 

Es muy simple de usar y también hay muchos tipos diferentes de los oyentes para SQL , Registro de eventos, archivo de texto, etc. Así que no tendrá que ajustar su código si desea cambiar el oyente.

Cuestiones relacionadas