Il formato del file di configurazione esaminato da
fileConfig() è basato sulla funzionalità di ConfigParser.
Il file deve contenere le sezioni [loggers], [handlers]
e [formatters] che identificano per nome le entità di ogni tipo
che è definito nel file. Per ciascuna entità, c'è una sezione
separata che identifica il modo in cui l'entità viene configurata.
Quindi per un logger chiamato log01 nella sezione [loggers],
i dettagli rilevati vengono mantenuti nella sezione
[logger_log01]. Similmente, un handler chiamato hand01 avrà
la propria configurazione mantenuta in una sezione chiamata
[handler_hand01], quando un formatter chiamato form01
avrà nella sezione [formatters] la propria configurazione
specificata in una sezione chiamata [formatter_form01]. La
configurazione del logger principale deve essere inserita nella
sezione chiamata [logger_root].
Esempi di queste sezioni presenti nel file sono presentate qui di seguito.
[loggers] keys=root,log02,log03,log04,log05,log06,log07 [handlers] keys=hand01,hand02,hand03,hand04,hand05,hand06,hand07,hand08,hand09 [formatters] keys=form01,form02,form03,form04,form05,form06,form07,form08,form09
Il logger principale deve specificare un livello e una lista di handler. Un esempio della sezione di un root logger è fornita a seguito.
[logger_root] level=NOTSET handlers=hand01
La voce level può essere una tra
DEBUG, INFO, WARNING, ERROR, CRITICAL o NOTSET. Solo
per il logger principale, il root logger, NOTSET indica che
tutti i messaggi verranno loggati. I valori di livello vengono valutati
(eval()) nel contesto dello spazio dei nomi del package di
logging.
La voce handlers è una lista separata da virgole di nomi di
handler, che devono apparire nella sezione [handlers]. Questi
nomi devono apparire nella sezione [handlers] e devono avere
una corrispondente sezione nel file di configurazione.
Per i logger diversi dal logger principale (root logger), vengono richieste alcune ulteriori informazioni. Queste vengono illustrate con l'esempio seguente:
[logger_parser] level=DEBUG handlers=hand01 propagate=1 qualname=compiler.parser
Le voci degli handlers e di level vengono interpretate
come per il logger principale, eccezion fatta laddove il livello del
logger non principale è specificato come NOTSET. Il sistema
consulta il logger più in alto nella gerarchia per determinare
l'effettivo livello del logger. La voce propagate viene
impostata a 1 per indicare che i messaggi devono essere propagati fino
all'handler più alto nella gerarchia, o 0 per indicare che i messaggi
non si devono propagare agli handler superiori nella
gerarchia. La voce qualname è gerarchicamente il nome del
canale del logger, per esempio, il nome usato dall'applicazione per
ottenere il logger.
Le sezioni che specificano la configurazione per l'handler sono esemplificate di seguito.
[handler_hand01] class=StreamHandler level=NOTSET formatter=form01 args=(sys.stdout,)
La voce class indica la classe dell'handler (come determinata da
eval() nello spazio dei nomi del package logging).
level viene interpretato come per i logger, e
NOTSET viene interpretato come "registra ogni cosa".
La voce formatter indica il nome della chiave del formatter per
questo handler. Se vuoto, viene utilizzato un formatter predefinito
(logging._defaultFormatter). Se viene specificato un nome,
deve apparire nella sezione [formatters] e possedere una
corrispondente sezione nel file di configurazione.
La voce args, quando valutata (attraverso eval()),
nel contesto dello spazio dei nomi del package logging, è la
lista degli argomenti per il costruttore della classe di handler.
Riferitevi ai costruttori per l'handler principale, o all'esempio qui
di seguito, per vedere quali voci tipiche vengono utilizzate.
[handler_hand02]
class=FileHandler
level=DEBUG
formatter=form02
args=('python.log', 'w')
[handler_hand03]
class=handlers.SocketHandler
level=INFO
formatter=form03
args=('localhost', handlers.DEFAULT_TCP_LOGGING_PORT)
[handler_hand04]
class=handlers.DatagramHandler
level=WARN
formatter=form04
args=('localhost', handlers.DEFAULT_UDP_LOGGING_PORT)
[handler_hand05]
class=handlers.SysLogHandler
level=ERROR
formatter=form05
args=(('localhost', handlers.SYSLOG_UDP_PORT), handlers.SysLogHandler.LOG_USER)
[handler_hand06]
class=NTEventLogHandler
level=CRITICAL
formatter=form06
args=('Python Application', '', 'Application')
[handler_hand07]
class=SMTPHandler
level=WARN
formatter=form07
args=('localhost', 'from@abc', ['user1@abc', 'user2@xyz'], 'Logger Subject')
[handler_hand08]
class=MemoryHandler
level=NOTSET
formatter=form08
target=
args=(10, ERROR)
[handler_hand09]
class=HTTPHandler
level=NOTSET
formatter=form09
args=('localhost:9022', '/log', 'GET')
Le sezioni che specificano la configurazione del formatter sono presentate di seguito.
[formatter_form01] format=F1 %(asctime)s %(levelname)s %(message)s datefmt=
La voce format è la stringa di formato principale, e la voce
datefmt è la stringa di formato
strftime()-compatibile data/ora. Se vuota, il package lo
sostituisce con data/ora formato ISO8601, che è all'incirca
equivalente alla specifica stringa di formato "Il formato ISO8601 specifica anche i millisecondi, che vengono
aggiunti al risultato utilizzando la stringa di formato sopra, con un
separatore ",". Un ora d'esempio in formato ISO8601 è
2003-01-23 00:29:50,411.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.