我试图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)
Run Code Online (Sandbox Code Playgroud)
这是我的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
Run Code Online (Sandbox Code Playgroud)
它没有打印出来INFO,DEBUG消息以某种方式进入文件..有什么想法为什么它没有工作?
而且,现在,我已经在此python文件中定义了所有内容以用于记录目的.我想在logging conf文件中定义上面的内容并使用该fileConfig()函数读取它.我不知道如何RotatingFileHandler在logging.conf文件中使用该示例?
更新: -
下面是我修改后用于log.conf文件的更新的Python代码-
#!/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)
Run Code Online (Sandbox Code Playgroud)
以下是我的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
Run Code Online (Sandbox Code Playgroud)
但每当我编译它时,这就是我在控制台上出现的错误 -
$ 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'
Run Code Online (Sandbox Code Playgroud)
知道我在这里做错了什么吗?
它不会以某种方式将INFO,DEBUG消息打印到文件中..有什么想法为什么它没有工作?
您似乎没有设置loglevel,因此使用默认(警告)
来自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
Run Code Online (Sandbox Code Playgroud)