如何使用logging.conf文件使用RotatingFileHandler将所有内容记录到文件中?

时间:2013-11-22 21:06:45

标签: python logging file-io

我正在尝试将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

它不会以某种方式将INFODEBUG消息打印到文件中..有什么想法为什么它没有用完?

而且,现在,我已经在此python文件中定义了所有内容以用于记录目的。我想在logging conf文件中定义上述内容,并使用fileConfig()函数读取它。我不确定如何使用RotatingFileHandler文件中的logging.conf示例?

更新: -

下面是我更新的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'

知道我在这里做错了什么?

2 个答案:

答案 0 :(得分:6)

  

它不会以某种方式将INFO,DEBUG消息打印到文件中..任何   想到为什么它没有成功?

您似乎没有设置日志级别,因此使用默认(警告)

来自http://docs.python.org/2/library/logging.html

  

请注意,根记录器的创建级别为WARNING。

至于你的第二个问题,这样的事情应该做的伎俩(我没有测试过,只是改编自我使用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

答案 1 :(得分:3)

我知道,现在已经很晚了,但是我遇到了同样的错误,在搜索时我得到了你的问题。我能够解决我的问题,我认为它对其他一些用户也有帮助:

你已经创建了一个logger对象并试图访问 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' 错误必须消失。