2010-07-23 11 views
11

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') 

[...] 
+1

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. –

+0

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

+0

@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

risposta

7

Ho trovato questo comportamento quando sono in esecuzione più precessioni con il codice.

Purtroppo non esiste un'opzione perfetta.

Alcune idee, è possibile incorporare sono:

  • uso WatchedFileHandler (nuova in 2.6) e ruotare con programmi esterni come logrotate
  • uso syslog o altro registro aggregare server di
  • uso pitone registro aggregazione sentry - Questo è particolarmente utile con Django in quanto è possibile registrare non solo i messaggi di log, ma eccezioni con stacktrace completo e 404s.
Problemi correlati