我有一个带有Twisted的tcp服务器,每个客户机都有一个日志文件。所以我继承了twisted.logger.Logger。
from twisted.logger import Logger, textFileLogObserver
from twisted.python.logfile import LogFile
class LALogger(Logger):
logger_root_path = os.path.join(sys.path[0], 'log')
def __init__(self, log_folder, log_file_name):
super().__init__(namespace='')
logger_path = os.path.join(self.logger_root_path, log_folder)
self.log_file = LogFile(log_file_name + '.log', logger_path,
rotateLength=1000000, maxRotatedFiles=5)
self.observer = textFileLogObserver(
self.log_file, timeFormat='[%Y-%m-%d %H:%M:%S]')当日志文件大于1000000时,它应该轮换。但有时无法重命名日志文件。我想我应该在轮换之前关闭日志文件。我该怎么办?谢谢。
发布于 2017-11-01 20:46:46
不要子类化Logger。如果您想要一个具有特定观察者的Logger,只需编写一个函数:
def my_logger():
observer = textFileLogObserver(...)
la_logger = Logger(observer=observer)
return la_logger如果您想要更改日志文件的轮换行为,则需要以某种方式更改LogFile的行为-因为这才是实际写入日志文件的内容。
幸运的是,LogFile只是一个带有write method.So的对象,你可以创建自己的对象,以任何你喜欢的方式实现write (包括你需要的任何特殊的旋转逻辑),然后使用它。
但是,在旋转文件之前,LogFile已经关闭了该文件。
https://stackoverflow.com/questions/47031476
复制相似问题