【问题标题】:How to inherit from twisted.logger.Logger?如何从twisted.logger.Logger 继承?
【发布时间】:2018-04-12 09:22:15
【问题描述】:

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

【问题讨论】:

    标签: logging twisted logfile


    【解决方案1】:

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

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

    如果您想更改日志文件轮换行为,您需要以某种方式更改 LogFile 的行为 - 因为那是实际写入日志文件的内容。

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

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

    【讨论】:

    • 非常感谢。我会试试你的建议。
    猜你喜欢
    • 2018-03-10
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多