我正在实现日志旋转到旋转,最大字节数为16384,backupCount为5。为什么旋转不会在'a'模式下发生,而是在'a +'模式下起作用。
我正在使用的基本python代码最终将写入超过16K的数据。
import logging
import logging.config
import logging.handlers
logging.config.fileConfig(fname='logtest.conf', disable_existing_loggers=False)
logger = logging.getLogger(__name__)
###
logging.info("So did it all load")
logging.info("Looking to cause log to rotate.. so bunch of data follows")
for x in range(200):
logging.info("*******************************************************************************************************************")
这是不会导致轮换的logtest.conf文件。
[loggers]
keys=root
[handlers]
keys=consoleHandler, defaultLogFile
[formatters]
keys=mainFormatter, consoleFormater
[logger_root]
level=DEBUG
handlers=consoleHandler, defaultLogFile
qualname=root
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=consoleFormater
args=(sys.stdout,)
[handler_defaultLogFile]
class=logging.handlers.RotatingFileHandler
args=('./logs/test.log', 'a', 16384, 5)
formatter=mainFormatter
[formatter_mainFormatter]
format=%(asctime)s %(levelname)s [%(name)s-func:%(funcName)s] - %(message)s
[formatter_consoleFormater]
format=%(levelname)s [%(name)s-func:%(funcName)s] - %(message)s
如果将行args=('./logs/test.log', 'a', 16384, 5)
更改为args=('./logs/test.log', 'a+', 16384, 5)
,则会看到轮换,并按设计创建了新文件。
这已在Linux和Windows系统上进行了尝试,结果是'a +'模式有效,这与文档https://docs.python.org/3/library/logging.handlers.html#rotatingfilehandler相反,表明'a'模式应该有效。