2016-05-26 12 views
0

Ich versuche, ein Programm verwenden nur die SysLogHandler-Instanz für die Protokollierung und keine anderen Handler. Ich erwarte, dass es nicht zu irgendwelchen Dateien oder stdout loggt.Python-Protokollierung: Ausgabe auf stdout deaktivieren

self.logger = logging.getLogger(self.name) 

    syslog_handler = logging.handlers.SysLogHandler(
     socktype=socket.AF_UNIX, 
     address='/dev/log', 
     facility=logging.handlers.SysLogHandler.LOG_LOCAL4, 
    ) 

    # Check if there is a handler attached 
    if len(self.logger.handlers) > 0: 

     # If there is a handler attached 
     # ensure it is a SysLogHandler instance 

     handler = self.logger.handlers[0] 
     if not (handler.__class__ == logging.handlers.SysLogHandler): 
      # If is was something else but a SysLogHandler instance, 
      # remove it and attach the syslog_handler 

      self.logger.handlers = [] 
      self.logger.addHandler(syslog_handler) 
    else: 
     # If no handlers attached, 
     # attach syslog_handler 

     self.logger.handlers = [] 
     self.logger.addHandler(syslog_handler) 

Aber mit dieser Einstellung geht es Linien, um stdout zu spucken, wenn sie mit python srcipt.py

+3

Verwenden Sie self.logger.propagate = False, ansonsten wird root logger ebenfalls verwendet. –

+2

[probiere 'logging_tree'] (https://pypi.python.org/pypi/logging_tree), um zu sehen, was wohin geht. – jfs

Antwort