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

标签 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() 函数读取它。我不确定如何使用 logging.conf 文件中的 RotatingFileHandler 示例?

更新:-

下面是我修改过的更新后的 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 文件 -

[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'

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

最佳答案

It doesn't print out INFO, DEBUG message into the file somehow.. Any thoughts why it is not working out?

你似乎没有设置日志级别,所以使用默认(警告)

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

Note that the root logger is created with level 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

关于python - 如何使用 logging.conf 文件使用 RotatingFileHandler 将所有内容记录到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20154490/

相关文章:

python - Telnet 和 SSH 在主文件中调用,Telnet 有效但 ssh 失败

c++ - 如何创建优化的图形多色记录器?

android - 如何在 Flutter 中禁用发布版本中的所有日志 [debugPrint()]?

java - 从 UTF-16 编码的文本文件中读取,þÿ 放在前面

java - 在 Android 中通过 TCP 发送时文件被损坏

python - 就地修改 Python 列表

python - 有没有办法使用 SpaCy 获取整个成分?

python - CSV dtype 中的 numpy rearray 有很多列,但 shape 只显示一行,这是为什么?

java - Docker 容器不打印未在 log4j2.xml 中指定的位置的日志

php - 什么更快? file_put_contents();打开();写入(); fclose();?