Voglio scrivere alcune informazioni di registro dallo script principale di python in un file in/var/log.La migliore pratica per scrivere i log in/var/log da uno script python?
Quando chiamo logger.info("Starting")
, ottengo un PermissionError sul file, cosa abbastanza normale dato che i file in/var/log appartengono a root e il mio programma non viene eseguito come root.
Potrei ovviamente impostare i diritti di /var/log/my.log
per consentire a myapp di scrivere in esso. (Impostare lo stesso gruppo, ad esempio). Ma non mi sembra una buona pratica: cosa succede se installo myapp su un altro computer? Dovrei quindi modificare i diritti sul file di registro durante il processo di installazione? O c'è un altro modo più generico per farlo? (Come un modo generico per inviare i registri al "sistema"? Con generico intendo anche portatile, cosa funzionerebbe su linux, freebsd ecc.)
Anche se non sono sicuro che sia rilevante, per informazioni, qui ci sono alcune parti del mio codice:
script principale:
import logging, logging.config
from lib import settings
settings.init()
logging.config.fileConfig(settings.logging_conf_file)
logger = logging.getLogger(__name__)
il gestore corrispondenza settings.logging_conf_file
, nel file di log di configurazione:
[handler_mainHandler]
class=FileHandler
level=INFO
formatter=defaultFormatter
filemode=w
args=('/var/log/myapp.log',)
Questo sembra buono per FreeBSD, ma purtroppo la mia macchina Linux non è in esecuzione syslogd per impostazione predefinita. Invece ha rsyslogd e sembra non ascoltare nessuna porta. Devo ancora scoprire come configurarlo correttamente e vedere se SysLogHandler funzionerà anche con rsyslogd. – zezollo
Ancora difficile da configurare. Ho dovuto chiedere [un'altra domanda] (http://stackoverflow.com/questions/36793037/how-to-configure-rsyslog-for-use-with-sysloghandler-logging-class). – zezollo