Ho un sito Web basato su django e uso il modulo di registrazione standard per tenere traccia dell'attività web.Problema con la registrazione di Python RotatingFileHandler nel sito Web di Django
Il registro viene eseguito tramite RotatingFileHandler che è configurato con 10 file di registro, 1000000 byte ciascuno. Il sistema di registro funziona, ma questo sono i file di log che ricevo:
-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
Come potete vedere si tratta di un pasticcio. Ultimo accesso è stato scritto in un file hr.log.2 (23 luglio 16,24) invece di hr.log, e logging documentation afferma che:
[...] Ad esempio, con una backupCount 5 e un nome file di base di app.log, otterresti app.log, app.log.1, app.log.2, fino a app.log.5. Il file in fase di scrittura è sempre app.log. Quando questo file viene riempito, viene chiuso e rinominato in app.log.1, e se esistono file app.log.1, app.log.2, ecc., Vengono rinominati in app.log.2, app. log.3 ecc. rispettivamente.
Cosa sto sbagliando?
mio file di configurazione di registrazione è:
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
e il mio modulo Python per impostare il sistema di log è:
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")
quindi, a la parte superiore della mia views.py ho:
import logging
from hr import logger
log = logging.getLogger('hr.views')
log.info('Load hr.views')
[...]
ho provato una configurazione a livello locale con il codice e funziona benissimo. Non posso fare a meno di notare che i timestamp sono principalmente: 30 e: 03. Specialmente dalle 14:03 sembra che i file di registro siano stati ruotati all'esterno dell'applicazione. Un'idea: sei sicuro che si tratta dell'unica registrazione configurata? Sembra un po 'come se avessi qualche altro codice di log che mantiene un handle di file aperto. Mentre quell'altra maniglia indicava hr.log quando l'app è stata avviata, da allora è stata ruotata in hr.2. –
Quindi ... non stai dicendo che il sistema di registrazione è rotto, solo che i timestamp sono stati cambiati? I file di registro sono ruotati nell'ordine corretto? Ho appena controllato i timestamp nei miei registri rotanti con lo stesso metodo e sono nell'ordine corretto. Non ho alcuna elaborazione di registro che sta elaborando i registri. Sembra che potresti avere un'attività periodica che forse tocca i file? – Kekoa
@Kekoa Come dici tu, il sistema di log non è rotto, è solo che non funziona come previsto. Sfortunatamente, non sto più lavorando al progetto e non sono in grado di testare alcun suggerimento possibile. Grazie. – ssoler