Как записывать все в файл с помощью RotatingFileHandler с помощью файла logging.conf?
Я пытаюсь использовать RotatingHandler
для нашей цели ведения журнала в Python. Я сохранил файлы резервных копий как 500, что означает, что он создаст максимум 500 файлов, которые я предполагаю, и размер, который я установил, составляет 2000 байт (не уверен, что это рекомендуемый предел размера).
Если я запустил свой код ниже, он не записывает все в файл. Я хочу записать все в файл -
#!/usr/bin/python
import logging
import logging.handlers
LOG_FILENAME = 'testing.log'
# Set up a specific logger with our desired output level
my_logger = logging.getLogger('agentlogger')
# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(LOG_FILENAME, maxBytes=2000, backupCount=100)
# create a logging format
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
my_logger.addHandler(handler)
my_logger.debug('debug message')
my_logger.info('info message')
my_logger.warn('warn message')
my_logger.error('error message')
my_logger.critical('critical message')
# Log some messages
for i in range(10):
my_logger.error('i = %d' % i)
Это то, что печатается в моем файле testing.log
-
2013-11-22 12:59:34,782 - agentlogger - WARNING - warn message
2013-11-22 12:59:34,782 - agentlogger - ERROR - error message
2013-11-22 12:59:34,782 - agentlogger - CRITICAL - critical message
2013-11-22 12:59:34,782 - agentlogger - ERROR - i = 0
2013-11-22 12:59:34,782 - agentlogger - ERROR - i = 1
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 2
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 3
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 4
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 5
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 6
2013-11-22 12:59:34,784 - agentlogger - ERROR - i = 7
2013-11-22 12:59:34,784 - agentlogger - ERROR - i = 8
2013-11-22 12:59:34,784 - agentlogger - ERROR - i = 9
Он не печатает сообщение INFO
, DEBUG
в файл как-то.. Любые мысли, почему это не работает?
А также, прямо сейчас, я определил все в этом файле python для целей ведения журнала. Я хочу определить выше вещи в файле logging conf
и прочитать его с помощью функции fileConfig()
. Я не уверен, как использовать пример RotatingFileHandler
в файле logging.conf
?
UPDATE: -
Ниже приведен мой обновленный код Python, который я изменил для использования с файлом log.conf
-
#!/usr/bin/python
import logging
import logging.handlers
my_logger = logging.getLogger(' ')
my_logger.config.fileConfig('log.conf')
my_logger.debug('debug message')
my_logger.info('info message')
my_logger.warn('warn message')
my_logger.error('error message')
my_logger.critical('critical message')
# Log some messages
for i in range(10):
my_logger.error('i = %d' % i)
И ниже мой log.conf file
-
[loggers]
keys=root
[handlers]
keys=logfile
[formatters]
keys=logfileformatter
[logger_root]
level=DEBUG
handlers=logfile
[logger_zkagentlogger]
level=DEBUG
handlers=logfile
qualname=zkagentlogger
propagate=0
[formatter_logfileformatter]
format=%(asctime)s %(name)-12s: %(levelname)s %(message)s
[handler_logfile]
class=handlers.RotatingFileHandler
level=NOTSET
args=('testing.log',2000,100)
formatter=logfileformatter
Но всякий раз, когда я его компилирую, это ошибка, которую я получил на моей консоли -
$ python logtest3.py
Traceback (most recent call last):
File "logtest3.py", line 6, in <module>
my_logger.config.fileConfig('log.conf')
AttributeError: 'Logger' object has no attribute 'config'
Подумайте, что я здесь делаю неправильно?
Ответы
Ответ 1
Он не печатает сообщение INFO, DEBUG в файл каким-то образом.. Любой мысли, почему это не получается?
вы, кажется, не задаете loglevel, поэтому используется значение по умолчанию (предупреждение)
из http://docs.python.org/2/library/logging.html:
Обратите внимание, что корневой регистратор создается с уровнем ПРЕДУПРЕЖДЕНИЕ.
как для вашего второго вопроса, что-то вроде этого должно сделать трюк (я его не тестировал, просто адаптирован из моей конфигурации, использующей TimedRotatingFileHandler):
[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=('testing.log','a',2000,100)
formatter=logfileformatter
Ответ 2
Я знаю, очень поздно, но у меня только такая же ошибка, и во время поиска у меня возникла ваша проблема. Я могу решить свою проблему, и я подумал, что это может быть полезно и для другого пользователя:
вы создали объект журнала и пытаетесь получить доступ к my_logger.config.fileConfig('log.conf'), который не так, вы должны использовать logger.config.fileConfig('log. conf '), как я упоминал ниже, и нужно импортировать logging.config:
#!/usr/bin/python
import logging
import logging.handlers
import logging.config
logging.config.fileConfig('log.config',disable_existing_loggers=0)
my_logger = logging.getLogger('you logger name as you mention in your conf file')
my_logger.debug('debug message')
my_logger.info('info message')
my_logger.warn('warn message')
my_logger.error('error message')
my_logger.critical('critical message')
после выполнения этих изменений Объект AttributeError: 'Logger' не имеет атрибута 'config'
ошибка должна исчезнуть.