¿Dónde están las mejores ubicaciones para escribir un registro de errores en Windows?

StackOverflow https://stackoverflow.com/questions/191609

  •  08-07-2019
  •  | 
  •  

Pregunta

¿Dónde escribiría un archivo de registro de error, digamos ErrorLog.txt , en Windows? Tenga en cuenta que la ruta debería estar abierta a usuarios básicos para permisos de escritura de archivos.

Sé que el registro de eventos es una posible ubicación para escribir errores, pero funciona para " usuario " permisos de nivel?

EDITAR: Estoy apuntando a Windows 2003, pero estaba planteando la pregunta de tal manera que tuviera una " Guía general " para saber dónde escribir registros de errores.
En cuanto al EventLog, he tenido problemas anteriormente en una aplicación ASP.NET donde quería iniciar sesión en el registro de eventos de Windows, pero tuve problemas de seguridad que me causaron angustia. (No recuerdo los problemas que tuve, pero recuerdo haberlos tenido).

¿Fue útil?

Solución

¿Ha considerado iniciar sesión en el visor de eventos? Si desea escribir su propio registro, sugiero el directorio de configuración de la aplicación local de los usuarios. Haga un directorio de productos debajo de allí. Es diferente en diferentes versiones de Windows.

En Vista, no puede colocar archivos como este en c: \ archivos de programa. Tendrás muchos problemas con él.

En .NET, puede encontrar esta carpeta con esto:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

Y el registro de eventos también es bastante simple de usar:

http://msdn.microsoft.com/en -us / library / system.diagnostics.eventlog.aspx

Otros consejos

Los archivos de texto son excelentes para una aplicación de servidor (usted dijo Windows 2003). Debe tener un archivo de registro separado para cada aplicación de servidor, la ubicación es realmente una cuestión de convención para acordar con los administradores. P.ej. para aplicaciones ASP.NET, a menudo las he visto ubicadas en un disco separado de la aplicación bajo una estructura de carpetas que imita la estructura del directorio virtual.

Para las aplicaciones cliente, una desventaja de los archivos de texto es que un usuario puede iniciar varias copias de su aplicación (a menos que haya tomado medidas específicas para evitarlo). Entonces, tiene el problema de contención si varias instancias intentan escribir en el mismo archivo de registro. Por esta razón, siempre preferiría el Registro de eventos de Windows para aplicaciones cliente. Una advertencia es que debe ser administrador para crear un registro de eventos; esto puede hacerse, p. por el paquete de instalación.

Si usa un archivo, le sugiero que use la carpeta Environment.SpecialFolder. Local ApplicationData en lugar de SpecialFolder.ApplicationData como lo sugieren otros. LocalApplicationData está en el disco local: no desea que los problemas de red le impidan iniciar sesión cuando el usuario tenga un perfil móvil. Para una aplicación WinForms, use Application.LocalUserAppDataPath.

En cualquier caso, usaría un archivo de configuración para decidir dónde iniciar sesión, para que pueda cambiarlo fácilmente. P.ej. Si utiliza Log4Net o un marco similar, puede configurar fácilmente si desea iniciar sesión en un archivo de texto, registro de eventos, ambos o en otro lugar (por ejemplo, una base de datos) sin cambiar su aplicación.

Personalmente, sugeriría usar el registro de eventos de Windows, es genial. Si no puede, escriba el archivo en el directorio ApplicationData o en el directorio ProgramData (Datos de la aplicación para todos los usuarios en Windows XP).

Las ubicaciones estándar son:

C:\Documents and Settings\All Users\Application Data\MyApp

o

C:\Documents and Settings\%Username%\Application Data\MyApp

(también conocido como % UserProfile% \ Application Data \ MyApp ) que coincidiría con su requisito de permiso de nivel de usuario . También separa los registros creados por diferentes usuarios.

Usando el tiempo de ejecución .NET , estos se pueden construir como:

AppDir=
  System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

o

AppDir=
  System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

seguido de:

MyAppDir = IO.Path.Combine(AppDir,'MyApp')

(que, con suerte, también asigna mapas a los perfiles de Vista ).

El registro de eventos de Windows es definitivamente el camino a seguir para el registro de errores. No está limitado a la "Aplicación" inicie sesión ya que es posible crear un nuevo objetivo de registro (por ejemplo, " Mi aplicación "). Es posible que deba hacerse como parte de la configuración, ya que no estoy seguro de si requiere privilegios administrativos o no. Hay un ejemplo de Microsoft en C # en http://support.microsoft.com/kb/307024 .

Windows 2008 también tiene Reenvío de registro de eventos que puede ser bastante útil con aplicaciones de servidor.

Estoy de acuerdo con Lou en esto, pero prefiero configurarlo en un archivo de configuración como dijo Joe. Puedes usar

valor de archivo = " $ {APPDATA} /Test/log-file.txt"

(" Test " podría ser lo que desee o eliminar por completo) en el archivo de configuración, lo que hace que el archivo de registro se escriba en " / Documents and Settings / LoginUser / Application Datos / Prueba " en Windows XP y " / Users / LoginUser / AppData / Roaming / Test en Windows Vista.

Solo estoy agregando esto, ya que pasé demasiado tiempo pensando cómo hacer que esto funcione en Windows Vista ...

Esto funciona tal cual con las aplicaciones de Windows. Para usar el inicio de sesión en aplicaciones web, encontré que la entrada del blog de Phil Haack sobre esto es un gran recurso: http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications. aspx

% TEMP% siempre es una buena ubicación para los registros que encuentro.

Ir contra la corriente aquí, depende de lo que tengas que hacer. A veces necesita manipular los resultados, por lo que log.txt es el camino a seguir. Es simple, mutable y fácil de buscar.

Tome un ejemplo de Joel. Fogbugz enviará un registro / volcado de mensajes de error a través de http a su servidor. Puede hacer lo mismo y no tener que preocuparse por los derechos de acceso del usuario en su disco.

Personalmente no me gusta usar el Registro de eventos de Windows donde estoy ahora porque no tenemos acceso a los servidores de producción, por lo que eso significaría que tendríamos que solicitar acceso cada vez que quisiéramos mirar el errores Desafortunadamente, no es un proceso rápido, por lo que su solución de problemas se soluciona por completo al esperar a otra persona. Tampoco me gusta que se pierdan en otras aplicaciones. Claro que puede ordenar, pero es solo un poco de desplazamiento desplazarse hacia abajo. Lo que use terminará siendo una combinación de preferencias personales junto con limitaciones del entorno en el que está trabajando. (Archivo de registro, registro de eventos o base de datos)

Póngalo en el directorio de la aplicación. Los usuarios necesitarán acceso a la carpeta para ejecutar y ejecutar la aplicación, y puede verificar el acceso de escritura al iniciar la aplicación.

El registro de eventos es difícil de usar para la resolución de problemas, pero aún debe publicar errores significativos allí.

EDITAR: debe utilizar los bloques de aplicaciones de MS para iniciar sesión si está utilizando .NET. Realmente hacen la vida fácil.

Jeez Karma-asesinos. La próxima vez ni siquiera ofreceré una sugerencia cuando el póster publique una publicación incompleta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top