2013-12-26 2 views
7

Я работаю с Python, и мне нужно использовать регистратор, поэтому я решил начать использовать RotatingFileHandler. Ниже мой logging.conf файлКак записывать два значения переменных в один журнал в Python?

[loggers] 
keys=root 

[handlers] 
keys=logfile 

[formatters] 
keys=logfileformatter 

[logger_root] 
level=DEBUG 
handlers=logfile 

[formatter_logfileformatter] 
format=%(asctime)s %(name)-12s: %(levelname)s %(message)s 

[handler_logfile] 
class=handlers.RotatingFileHandler 
level=NOTSET 
args=('ookagent.log', 'a', 50000000000, 5) 
formatter=logfileformatter 

А ниже мой Python скрипт, из которого я успешно смог войти в файлы. Но я пытаюсь войти два значения переменных из одной заготовки, как упомянуто, как показано ниже -

#!/usr/bin/python 
import logging 
import logging.config 
import logging.handlers 

# using RotatingFileHandler for logging purpose 
logging.config.fileConfig('logging.conf') 
ooklogger = logging.getLogger('') 

list1 = ['abc', 'def', 'ghi'] 
list2 = ['jkl', 'mno', 'pqr'] 

ooklogger.info("Test %s" % (list1, list2)) 

Но всякий раз, когда я бегу мой выше сценарий Python, я всегда получаю ниже ошибки -

ooklogger.info("Test %s" % (list1, list2)) 
TypeError: not all arguments converted during string formatting 

Любая идея неправильно я делаю?

ответ

9

Функции ведения журнала python поддерживают встроенную замену строк documented here. Этот журнал поддерживает замену arg и kwarg.

from sys  import stderr 
from logging import getLogger, StreamHandler, Formatter, DEBUG 

l = getLogger() 
sh = StreamHandler(stderr) 
sh.setLevel(DEBUG) 
f = Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
sh.setFormatter(f) 
l.addHandler(sh) 
l.setLevel(DEBUG) 

L0 = ['abc', 'def', 'ghi'] 
L1 = ['jkl', 'mno', 'pqr'] 

l.info('%(list_0)s - %(list_1)s', { 'list_0': L0, 'list_1' : L1 }) 
# identical to 
l.info('%s - %s', L0, L1) 
# identical to 
l.info('%s - %s' % (L0, L1)) 
Смежные вопросы