Tengo un sitio web con django y uso un módulo de registro estándar para rastrear la actividad web.Problema con el registro de Python RotatingFileHandler en el sitio web de Django
El registro se realiza a través de RotatingFileHandler que está configurado con 10 archivos de registro, 1000000 bytes cada uno. El sistema de registro funciona, pero esto son los archivos de registro que recibo:
-rw-r--r-- 1 apache apache 83 Jul 23 13:30 hr.log
-rw-r--r-- 1 apache apache 446276 Jul 23 13:03 hr.log.1
-rw-r--r-- 1 apache apache 999910 Jul 23 06:00 hr.log.10
-rw-r--r-- 1 apache apache 415 Jul 23 16:24 hr.log.2
-rw-r--r-- 1 apache apache 479636 Jul 23 16:03 hr.log.3
-rw-r--r-- 1 apache apache 710 Jul 23 15:30 hr.log.4
-rw-r--r-- 1 apache apache 892179 Jul 23 15:03 hr.log.5
-rw-r--r-- 1 apache apache 166 Jul 23 14:30 hr.log.6
-rw-r--r-- 1 apache apache 890769 Jul 23 14:03 hr.log.7
-rw-r--r-- 1 apache apache 999977 Jul 23 12:30 hr.log.8
-rw-r--r-- 1 apache apache 999961 Jul 23 08:01 hr.log.9
Como se puede ver que es un desastre. Último registro ha sido escrito para presentar hr.log.2 (jul 23 de 16:24) en lugar de hr.log, y logging documentation establece que:
[...] Por ejemplo, con un backupCount de 5 y un nombre de archivo base de app.log, obtendrías app.log, app.log.1, app.log.2, hasta app.log.5. El archivo que se está escribiendo siempre es app.log. Cuando se completa este archivo, se cierra y se renombra a app.log.1, y si existen los archivos app.log.1, app.log.2, etc., se renombran a app.log.2, app. log.3 etc. respectivamente.
¿Qué estoy haciendo mal?
Mi archivo de configuración de registro es:
logger.conf:
[loggers]
keys=root
[handlers]
keys=fileHandler
[formatters]
keys=simple
#--------------------------------------------------------------------
# Formatters
[formatter_simple]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
#--------------------------------------------------------------------
# Handlers
[handler_fileHandler]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=simple
args=("/data/django/hr/hr.log",'a',1000000,10)
#--------------------------------------------------------------------
# Loggers
[logger_root]
level=DEBUG
handlers=fileHandler
y mi módulo de Python para configurar el sistema de registro es:
logger.py
import os, logging
# Load config file
logger_config_file = \
os.path.join(os.path.abspath(os.path.dirname(__file__)), 'logger.conf')
logging.config.fileConfig(logger_config_file)
# Create logger
logger = logging.getLogger('hr_Logger')
# Log start message
logger.info("Logging system started")
luego, en la parte superior de mi views.py tengo:
import logging
from hr import logger
log = logging.getLogger('hr.views')
log.info('Load hr.views')
[...]
probé una configuración a nivel local con su código y funciona bien. No puedo dejar de notar que las marcas de tiempo son en su mayoría: 30 y: 03. Especialmente desde las 14:03 parece que los archivos de registro se rotaron fuera de la aplicación. Una idea: ¿está seguro de que este es el único registro configurado? Se parece un poco a que tiene algún otro código de registro que mantiene un descriptor de archivo abierto. Mientras que el otro identificador apuntaba a hr.log cuando la aplicación comenzó, se rotó a hr.2 desde entonces. –
Entonces ... ¿no está diciendo que el sistema de registro está roto, solo que las marcas de tiempo han sido cambiadas? ¿Los archivos de registro están girados en el orden correcto? Acabo de comprobar las marcas de tiempo en mis registros rotatorios a través del mismo método y están en el orden correcto. No tengo ningún procesamiento de registro que esté procesando los registros. Parece que puede tener una tarea periódica que tal vez toque los archivos? – Kekoa
@Kekoa Como dices, el sistema de registro no está roto, es solo que no funciona como se esperaba. Desafortunadamente, ya no estoy trabajando en el proyecto y no puedo probar ninguna sugerencia posible. Gracias. – ssoler