我有一个带有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时,它应该旋转。但有时无法重命名日志文件。 我想我应该在旋转之前关闭日志文件。我应该怎么做?谢谢。
答案 0 :(得分:0)
不要继承Logger
。如果你想要一个Logger
与一个特定的观察者,只需写一个函数:
def my_logger():
observer = textFileLogObserver(...)
la_logger = Logger(observer=observer)
return la_logger
如果要更改日志文件的旋转行为,则需要以某种方式更改LogFile
的行为 - 因为这是实际写入日志文件的内容。
幸运的是,LogFile
只是一个带有write
方法的对象。所以你可以创建自己的对象,以任何你喜欢的方式实现write
(包括你需要的任何特殊旋转逻辑)而是使用它。
但是,LogFile
在旋转之前已经关闭了文件。因此,进一步调查您遇到的与旋转相关的错误的原因,以便您可以解决正确的问题。