Traceback (most recent call last):
File "/usr/lib64/python2.6/logging/handlers.py", line 76, in emit
    if self.shouldRollover(record):
File "/usr/lib64/python2.6/logging/handlers.py", line 150, in       shouldRollover
     self.stream.seek(0, 2)  #due to non-posix-compliant Windows feature
ValueError: I/O operation on closed file


我的脚本中有一行:

handler = logging.handlers.RotatingFileHandler(cfg_obj.log_file,maxBytes = maxlog_size, backupCount = 10)


没有错误消息时,它运行良好。但是,当有错误日志时,除非重新启动该过程,否则错误后的日志不会写入文件中。我们不想每次出现错误时都重新启动该过程。
感谢您的帮助!

最佳答案

我强烈建议您使用配置文件。例如,“ logging.conf”下面的配置代码具有不同的处理程序和格式化程序:

[loggers]
keys=root

[handlers]
keys=consoleHandler, rotatingFileHandler

[formatters]
keys=simpleFormatter, extendedFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler, rotatingFileHandler

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[handler_rotatingFileHandler]
class=handlers.RotatingFileHandler
level=INFO
formatter=extendedFormatter
args=('path/logs_file.log', 'a', 2000000, 1000)


[formatter_simpleFormatter]
format=%(asctime)s - %(levelname)s - %(message)s
datefmt=

[formatter_extendedFormatter]
format= %(asctime)s - %(levelname)s - %(filename)s:%(lineno)s - %(funcName)s() %(message)s
datefmt=


现在如何使用它“ main.py”:

import logging.config

# LOGGER
logging.config.fileConfig('path_to_conf_file/logging.conf')
LOGGER = logging.getLogger('root')
try:
    LOGGER.debug("Debug message...")
    LOGGER.info("Info message...")
except Exception as e:
    LOGGER.exception(e)


让我知道您是否需要更多帮助。

关于python - 遇到错误后RotatingFileHandler不会继续记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39983860/

10-11 22:24
查看更多