2017-10-31 7 views
1

私はTwistedと一緒にtcpサーバを持っており、各クライアントはログファイルを持っています。だから私はtwisted.logger.Loggerから継承します。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

Loggerをサブクラス化しないでください。あなたが特定のオブザーバーとLoggerをしたい場合は、単に関数を書く:あなたは、ログファイルのローテーションの動作を変更したい場合、あなたは何とかLogFileの動作を変更する必要が

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

- それは実際にログを書き込み何だからファイル。

幸い、LogFileは、あなた自身(あなたが必要とする特別なものは何でも回転ロジックを含む)writeあなたが好きなように実装したオブジェクトや使用を代わりに作成することができますmethod.So writeとちょうどオブジェクトです。

ただし、LogFileは、ファイルをローテーションする前にすでに閉じています。したがって、発生しているローテーション関連のエラーの原因をさらに調べて、正しい問題を修正できるようにしてください。

+0

ありがとうございます。私はあなたの提案を試みます。 – lakerszhy

関連する問題