GNU/Linux >> Linux Esercitazione >  >> Linux

Registrazione Python:controlla la posizione dei file di registro?

Per trovare la posizione del file di registro, prova a istanziare il tuo log oggetto in una shell Python nel tuo ambiente e osservando il valore di:

log.handlers[0].stream


Il logging Il modulo utilizza i gestori collegati ai logger per decidere come, dove o anche se i messaggi alla fine vengono archiviati o visualizzati. Puoi configurare logging per impostazione predefinita, scrive anche su un file. Dovresti davvero leggere i documenti, ma se chiami logging.basicConfig(filename=log_file_name) dove log_file_name è il nome del file in cui vuoi scrivere i messaggi (nota che devi farlo prima di qualsiasi altra cosa in logging viene chiamato), tutti i messaggi registrati in tutti i logger (a meno che non avvenga un'ulteriore riconfigurazione in seguito) verranno scritti lì. Prestare attenzione a quale livello è impostato il logger; se la memoria serve, info è al di sotto del livello di registro predefinito, quindi dovresti includere level=logging.INFO negli argomenti di basicConfig così che il tuo messaggio finisca nel file.

Per quanto riguarda l'altra parte della tua domanda, logging.getLogger(some_string) restituisce un Logger oggetto, inserito nella posizione corretta nella gerarchia dal root logger, con il nome che è il valore di some_string . Chiamato senza argomenti, restituisce il root logger. __name__ restituisce il nome del modulo corrente, quindi logging.getLogger(__name__) restituisce un Logger oggetto con il nome impostato sul nome del modulo corrente. Questo è un modello comune utilizzato con logging , poiché fa sì che la struttura del logger rispecchi la struttura del modulo del tuo codice, il che spesso rende i messaggi di registrazione molto più utili durante il debug.


Alcune buone risposte su questo, ma la risposta migliore non ha funzionato per me perché stavo usando un diverso tipo di gestore di file e handler.stream non fornisce il percorso, ma l'handle del file e ottenere il percorso da quello è alquanto non ovvio. Ecco la mia soluzione:

import logging
from logging import FileHandler

# note, this will create a new logger if the name doesn't exist, 
# which will have no handlers attached (yet)
logger = logging.getLogger('<name>')

for h in logger.handlers:
    # check the handler is a file handler 
    # (rotating handler etc. inherit from this, so it will still work)
    # stream handlers write to stderr, so their filename is not useful to us
    if isinstance(h, FileHandler):
        # h.stream should be an open file handle, it's name is the path
        print(h.stream.name)

Per ottenere la posizione del registro di un semplice file logger, prova

logging.getLoggerClass().root.handlers[0].baseFilename

Linux
  1. Come abilitare la registrazione delle query MySQL/MariaDB

  2. Come gestire i file di registro utilizzando Logrotate in Linux

  3. Controlla se String contiene una sottostringa in Python

  4. File di registro di Linux

  5. 20 File di registro Linux che si trovano nella directory /var/log

Come controllare la versione di Python in Linux, Mac e Windows

Come controllare la versione di Python

Controllare i file di configurazione di Linux per errori di sintassi

Come creare una configurazione Rsyslog di registrazione centralizzata

Come ruotare i file di registro Apache in Linux

Posso registrare l'attività di vi?