Rotar los logs de Apache es muy útil cuando estos crecen demasiado, y queremos realizar búsquedas en días concretos para localizar un error. Veamos cómo se hace.
También te puede interesar:
Comprobar sintaxis de Apache Linux
Instalar PHP en Centos
Cómo instalar un servidor web en un NAS Synology
Cómo saber si mi Synology es compatible con PLEX
Requisitos para rotar los logs de Apache
Apache debe estar instalado como servicio
Implementar el rotado de logs de Apache
- Detener Apache
- Mover los logs recientes
- Iniciar Apache
- Comprimir los logs movidos
- Ir renombrando los logs como
foo.log.1,foo.log.2... y borrar los más antiguos
Diseñar un script BASH para rotar logs de Apache
El siguiente script lo encontré en un blog externo. Lo comparto aquí por si es de utilidad. Consultar la fuente por si el script hubiera mejorado.
Script BAT:
@echo off rem rem Rotación de logs de Apache - v2014-02-05 rem rem Realiza una rotación de logs de Apache instalado como servicio de Windows rem chcp 1252 > NUL rem Necesario para usar variables en un bucle FOR setlocal enabledelayedexpansion rem Directorio de logs set DIR_LOGS=%ProgramFiles%Apache Software FoundationApache2.2logs rem Definición de los logs que vamos a rotar (debe ser válida dentro de un bucle FOR) set DEF_LOG="%DIR_LOGS%*access.log" "%DIR_LOGS%*error.log" rem Nº máximo de logs rotados que se conservarán set MAX_LOGS_ANTIGUOS=8 rem Si esta variable existe se comprimirán los logs rotados (requiere NTFS); rem comentar con REM para desactivar set COMPRIMIR_LOGS=Sí, por favor rem Ejecutable de Apache 2 (ruta completa si la carpeta no está en %PATH%) set APACHE=%ProgramFiles%Apache Software FoundationApache2.2binhttpd.exe rem Nombre del servicio set SERVICIO=Apache2.2 rem Si esta variable existe se insertará un PAUSE al final para poder leer la salida rem en sesiones no interactivas; comentar con REM para desactivar set PAUSA_AL_FINAL=Sí, por favor rem Sufijo para los archivos temporales set SUFIJO_TMP=.log_rotate_tmp-%RANDOM%%RANDOM% echo ========================================================================== echo Verificando la configuración de Apache... echo. "%APACHE%" -t echo. if %ERRORLEVEL% NEQ 0 ( goto cfg_err ) else ( goto cfg_ok ) :cfg_err echo Se han encontrado errores, no se puede continuar. goto fin :cfg_ok echo La configuración es correcta. echo ========================================================================== echo Deteniendo el servicio "%SERVICIO%"... echo. net stop "%SERVICIO%" if %ERRORLEVEL% NEQ 0 ( goto apagado_err ) else ( goto apagado_ok ) :apagado_err echo Ha fallado el apagado del servicio. goto fin :apagado_ok echo El servicio ha sido detenido con éxito. echo ========================================================================== echo Moviendo los logs recientes del directorio "%DIR_LOGS%"... echo. for %%i in (%DEF_LOG%) do ( set LOG=%%i set NOMBRE=%%~nxi set RUTA=%%~dpi echo !NOMBRE! -^> !NOMBRE!%SUFIJO_TMP% move /y "!LOG!" "!RUTA!!NOMBRE!%SUFIJO_TMP%" > NUL ) echo. echo Los logs han sido movidos con éxito. echo ========================================================================== echo Arrancando el servicio "%SERVICIO%"... echo. net start "%SERVICIO%" if %ERRORLEVEL% NEQ 0 ( goto arrancado_err ) else ( goto arrancado_ok ) :arrancado_err echo Ha fallado el arrancado del servicio. goto fin :arrancado_ok echo El servicio ha sido arrancado con éxito. if defined COMPRIMIR_LOGS ( echo ========================================================================== echo Comprimiendo los logs movidos... echo. for %%i in (%DEF_LOG%) do ( set NOMBRE=%%~nxi set RUTA=%%~dpi echo !NOMBRE!%SUFIJO_TMP% compact /c "!RUTA!!NOMBRE!%SUFIJO_TMP%" > NUL ) echo. echo Los logs han sido comprimidos con éxito. echo. ) echo ========================================================================== echo Rotando los logs antiguos... echo. rem rem Bucle principal: recorremos cada log en uso rem for %%i in (%DEF_LOG%) do ( set LOG=%%i set NOMBRE=%%~nxi set SUFIJO_TMP=%SUFIJO_TMP% call :rotar ) goto fin_rotar rem rem Bucle interior: dado un log, rotamos todas sus copias rem :rotar echo Rotando !NOMBRE! set /a HASTA=!MAX_LOGS_ANTIGUOS! rem rem Si ya tenemos el máximo de logs, eliminamos el último rem if exist "!LOG!.!HASTA!" ( echo Eliminando !NOMBRE!.!HASTA! del "!LOG!.!HASTA!" ) :siguiente_rotar set /a DESDE=!HASTA!-1 if !DESDE! equ 0 ( rem Log más reciente echo !NOMBRE!!SUFIJO_TMP! -^> !NOMBRE!.!HASTA! rename "!LOG!!SUFIJO_TMP!" "!NOMBRE!.!HASTA!" ) else ( rem Log archivado if exist "!LOG!.!DESDE!" ( echo !NOMBRE!.!DESDE! -^> !NOMBRE!.!HASTA! rename "!LOG!.!DESDE!" "!NOMBRE!.!HASTA!" ) ) set /a HASTA=!HASTA!-1 if !HASTA! neq 0 ( goto siguiente_rotar ) goto :EOF :fin_rotar echo. echo Los logs han sido rotados con éxito. echo ========================================================================== :fin echo. echo. if defined PAUSA_AL_FINAL ( pause ); endlocal
Consultar la fuente para obtener la última versión del script.



¡Hola! Soy Javier. Soy informático y me gusta documentar todo lo que aprendo. En mi blog te enseño todo lo que sé y cómo puedes aprender a crear tu propia web, mejorar el SEO y aplicar técnicas de Marketing Digital para conseguir mayor visibilidad. Suscríbete para no perderte ninguna de mis guías sobre WordPress, posicionamiento SEO o Marketing Digital.
