如何从twisted.logger.Logger继承?

时间:2017-10-31 09:02:03

标签: logging twisted logfile

我有一个带有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时,它应该旋转。但有时无法重命名日志文件。 我想我应该在旋转之前关闭日志文件。我应该怎么做?谢谢。

1 个答案:

答案 0 :(得分:0)

不要继承Logger。如果你想要一个Logger与一个特定的观察者,只需写一个函数:

def my_logger():
    observer = textFileLogObserver(...)
    la_logger = Logger(observer=observer)
    return la_logger

如果要更改日志文件的旋转行为,则需要以某种方式更改LogFile的行为 - 因为这是实际写入日志文件的内容。

幸运的是,LogFile只是一个带有write方法的对象。所以你可以创建自己的对象,以任何你喜欢的方式实现write(包括你需要的任何特殊旋转逻辑)而是使用它。

但是,LogFile在旋转之前已经关闭了文件。因此,进一步调查您遇到的与旋转相关的错误的原因,以便您可以解决正确的问题。