有人无意中移动了 python 程序使用的打开的日志文件。该程序使用带有 TimedRotatingFileHandler 的日志记录模块。当需要翻转文件时,会输出此错误:
Traceback (most recent call last):
File "/python_root/lib/logging/handlers.py", line 78, in emit
self.doRollover()
File "/python_root/lib/logging/handlers.py", line 338, in doRollover
os.rename(self.baseFilename, dfn)
OSError: [Errno 2] no such file or directory
Logged from file logtest.py, line 16
在随后每次尝试记录某些内容时都会重复该错误。记录的消息没有进入旧的(移动的)日志文件。
这会重现问题(如果您移动日志文件:))
import time
import logging
from logging import handlers
f = logging.Formatter( "%(asctime)s %(message)s" )
h = handlers.TimedRotatingFileHandler(
"testlog", when='s', interval=5, backupCount=10 )
h.setFormatter( f )
logger = logging.getLogger( 'test' )
logger.setLevel( logging.INFO )
logger.addHandler( h )
logger.info( "LOGTEST started" )
for i in range( 10 ):
time.sleep( 5 )
logger.info( "Test logging " + str( i ) )
我在这里担心的是后续日志消息会丢失。我想要实现的是,按优先顺序升序:
- 退出的异常。
- 我可以捕捉和处理的异常。
- 记录器会显示错误,但后续消息会转到旧日志文件。
- 记录器显示此错误,但会打开一个新的日志文件并正常继续。
我浏览了 docs/cookbook 中的相关钩子,但没有弹出任何内容。那里的指针同样受欢迎。
谢谢你的帮助,
乔纳森