asp.net mvc - script - ¿Eliminación de archivos de registro de Elmah, manualmente o hay una configuración?
elmah script (4)
¿Cómo elimino los archivos de registro que Elmah genera en el servidor?
¿Hay alguna configuración dentro de Elmah que pueda usar para eliminar archivos de registro? Preferiría especificar algunos criterios (por ejemplo, archivos de registro que tienen más de 30 días).
¿O debería escribir mi propio código para eso?
Al menos dentro de un proyecto MVC, puede ir al directorio App_Data / Elmah.Errors para eliminar los archivos XML de error que desea eliminar.
En respuesta a lo que Phil Wheeler mencionó anteriormente, en un proyecto actual que estoy haciendo en Mvc4, tenemos un área de Mvc llamada SiteAdmin. Esta área será responsable de todos los deberes de administración del sitio, incluido Elmah.
Para superar la falta de funcionalidad de eliminación, implementé una función para eliminar todas las entradas de registro actuales en Elmah (estamos usando la versión basada en XML).
Aquí hay una imagen de la vista de índice de SiteAdmin:
- Ver registro de errores: abre la interfaz de usuario de Elmah en una nueva ventana.
- Borrar registro de errores: presenta una ventana emergente de confirmación, luego borra todas las entradas si el usuario confirma.
Si alguien necesita el código como ejemplo, estaré encantado de enviarlo.
Mis mecánicos podrían modificarse con bastante facilidad para proporcionar un mecanismo para eliminaciones selectivas por criterios si fuera necesario (por fecha, por código de estado, etc.).
El punto de mi respuesta aquí es que usted podría proporcionar la funcionalidad de eliminación por su cuenta Y no bifurcar el código fuente abierto del proyecto Elmah.
Esta secuencia de comandos SQL elimina las filas más antiguas que las filas de "tamaño" más nuevas:
declare @size INTEGER = 50;
declare @countno INTEGER;
SELECT @countno = count([ErrorId]) FROM [dbo].[ELMAH_Error]
/*
SELECT TOP (@countno-@size)
[ErrorId]
,[TimeUtc]
,[Sequence]
FROM [dbo].[ELMAH_Error]
order by [Sequence] asc
GO
*/
DELETE FROM [dbo].[ELMAH_Error]
WHERE [ErrorId] IN (
SELECT t.[ErrorId] FROM (
SELECT TOP (@countno-@size)
[ErrorId]
,[TimeUtc]
,[Sequence]
FROM [dbo].[ELMAH_Error]
order by [Sequence] asc
) t
)
GO
/*
-- Print remaining rows
SELECT * FROM [dbo].[ELMAH_Error]
order by [Sequence] desc
*/
Puede establecer el número máximo de entradas de registro, pero no hay una función nativa para borrar registros más antiguos que una fecha determinada. ¡Aunque es una buena solicitud de características!
Si está almacenando sus registros de errores en la memoria, el número máximo almacenado es 500 por defecto y esto no requiere configuración adicional. Alternativamente, puede definir el número usando la palabra clave de size
:
<elmah>
<errorLog type="Elmah.MemoryErrorLog, Elmah" size="50" />
</elmah>
Definir un tamaño fijo es obviamente más importante para el registro en memoria o basado en XML, donde los recursos deben ser administrados de cerca. Sin embargo, puede definir un tamaño fijo para cualquier tipo de registro.