2012-03-09 16 views
10

Ho un'app denominata main nel mio progetto Django. Questa applicazione ha un diversi comandi di gestione che voglio per accedere, ma nulla sta rivelando in stdout con la seguente configurazione:Registrazione Django dei comandi di gestione personalizzati

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
     'log_to_stdout': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'stream': sys.stdout, 
      }, 
     }, 
    'loggers': { 
     'main': { 
      'handlers': ['log_to_stdout'], 
      'level': 'DEBUG', 
      'propagate': True, 
      } 
     } 
    } 

Che cosa sto facendo di sbagliato? Ho provato a utilizzare anche my_project.main, ma non ha funzionato. Sto usando 1.3.0 finale.

+0

quale comando stai usando per registrare l'uscita? – second

+0

Ho provato 'logging.info' e' logging.debug', ma nessuno dei due funziona. Dopo aver scritto questa domanda, ho notato che 'logging.warn' * fa * mi dà una stampa su stdout. – damd

risposta

12

è necessario spazio dei nomi del registratore. attualmente si accede al logger principale, che non è catturato dal vostro gestore, che è alla ricerca di main

piuttosto che logging.debug("message"), si vuole

logger = logging.getLogger('main') 
logger.debug("message") 
1

L'impostazione "stream" su sys.stdout non è necessaria. Tuttavia, è necessario definire un formattatore:

Esempio:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'simple': { 
      'format': '%(levelname)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'log_to_stdout': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'formatter': 'simple', 
      }, 
     }, 
    'loggers': { 
     'main': { 
      'handlers': ['log_to_stdout'], 
      'level': 'DEBUG', 
      'propagate': True, 
     } 
    } 
} 
+0

Ho provato copiando il codice di esempio letteralmente, ma ancora non ottengo nulla su stdout. * Tuttavia *, quando inserisco 'logging.warn ('foo')' come prima affermazione, ottengo una stampa in stdout. 'logging.info' e' logging.debug' continuano a non funzionare. – damd

-2

Se si sta iscrivendo questi comandi personalizzati con cron, è possibile "forzare" la registrazione semplicemente reindirizzando l'output in un file di testo.

* 12 * * * python /path/to/my/custom/command.py >> /path/to/my/logfile.txt 

Questo verrà eseguito un job cron a 12am ogni mattina, e tutto diretto a stdout (come dichiarazioni di stampa pitone) saranno scaricati in questo file di testo, concatenato su qualsiasi testo esistente nel file di log.

Se non si utilizza cron, basta creare uno script di shell singolo che esegue tutti gli script necessari per correre e orientarle verso i file di log che si desidera manualmente.

python /path/to/my/custom/command.py >> /path/to/my/logfile.txt 

... e così via.

+0

Grazie, ma questo è il metodo che ho usato prima. Sto cercando di fare la cosa giusta e, se possibile, utilizzare le funzionalità di registrazione incorporate di Django. – damd

+0

Abbastanza giusto. Spero che qualcuno vi intervieni e vi aiuti con questo; Sono primitivo e uso il reindirizzamento della shell. :) – patrickn

Problemi correlati