2017-10-31 7 views
1

Ich habe einen Tcp-Server mit Twisted, und jeder Client hat eine Protokolldatei. Also ich erben von twisted.logger.Logger.Wie erben Sie von 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]') 

Wenn die Protokolldatei größer als 1000000 kam, sollte sie rotieren. Aber manchmal kann die Protokolldatei nicht umbenannt werden. Ich denke, ich sollte die Protokolldatei vor dem Drehen schließen. Wie soll ich es machen? Vielen Dank.

Antwort

0

Keine Unterklasse Logger. Wenn Sie einen Logger mit einem bestimmten Beobachter wollen, schreiben Sie einfach eine Funktion:

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

Wenn Sie die Protokolldatei Rotationsverhalten ändern möchten, müssen Sie irgendwie das Verhalten von LogFile ändern - denn das ist es, was das Protokoll tatsächlich schreibt Datei.

Glücklicherweise LogFile ist nur ein Objekt mit einem write method.So Sie Ihr eigenes Objekt erstellen können, die write implementiert, wie Sie möchten (einschließlich, was spezielle Dreh Logik, die Sie benötigen) und verwenden, die statt.

Allerdings schließt LogFile die Datei bereits, bevor sie gedreht wird. Also, untersuchen Sie weiter, was die Ursache für den rotationsbedingten Fehler betrifft, damit Sie das richtige Problem beheben können.

+0

Vielen Dank. Ich werde deinen Vorschlag versuchen. – lakerszhy