2016-04-17 2 views
1

Ich verwende python-watchdog, um bestimmte Pfade auf Änderungen wie Hinzufügen, Löschen, Ändern usw. zu überwachen. Zusammen mit den Zeit- und Nachrichteninformationen möchte ich den Benutzernamen des Benutzers erfassen, der diese Änderung vorgenommen hat. Ich schaute auf getpass, und ich suchte nach einer Variable innerhalb der Protokollierung selbst, aber konnte nichts finden.Wie erfasst man den Benutzernamen des Betriebssystembenutzers in der Protokollierungsbibliothek von Python?

Irgendwelche Hinweise? Mein Watchdog-Code ist unter

print 'starting the watcher mate...' 
create_log_file() 
logging.basicConfig(filename = log_file, level = logging.INFO, format = '%(asctime)s - %(message)s', datefmt = '%Y-%m-%d %H:%M:%S') 
path = sys.argv[1] if len(sys.argv) > 1 else '/etc/nginx/' 
event_handler = LoggingEventHandler() 
observer = Observer() 
observer.schedule(event_handler, path, recursive=True) 
observer.start() 
+5

Dies könnte helfen: http://stackoverflow.com/questions/842059/is-there-a-portable-way-to-get-the-current-username-in-python –

Antwort

2

aktualisieren

ich in der Lage war mein Problem thusly zu lösen. Ich habe das Problem mit Method-Overriding gelöst. Ich habe eine andere Klasse in meinem Python-Skript namens MyLoggingEventHandler erstellt und den Namen des Benutzers mit der getpass.getuser()-Funktion eingefügt. Jetzt kann ich Details des Benutzers in meinen Protokollanweisungen abrufen.

-Code

class MyLoggingEventHandler(LoggingEventHandler): 

    def on_moved(self, event): 
      super(LoggingEventHandler, self).on_moved(event) 
      what = 'directory' if event.is_directory else 'file' 
      logging.info("Moved %s: from %s to %s, by %s", what, event.src_path, event.dest_path, getpass.getuser()) 

    def on_created(self, event): 
      super(LoggingEventHandler, self).on_created(event) 
      what = 'directory' if event.is_directory else 'file' 
      logging.info("Created %s: %s, by %s", what, event.src_path, getpass.getuser()) 

    def on_deleted(self, event): 
      super(LoggingEventHandler, self).on_deleted(event) 
      what = 'directory' if event.is_directory else 'file' 
      logging.info("Deleted %s: %s, by %s", what, event.src_path, getpass.getuser()) 

    def on_modified(self, event): 
      super(LoggingEventHandler, self).on_modified(event) 
      what = 'directory' if event.is_directory else 'file' 
      logging.info("Modified %s: %s, by %s", what, event.src_path, getpass.getuser()) 

Dies sind 2 Zeilen aus meiner Protokolldatei.

2016-04-17 15:23:16 - Modified file: /path/to/file.txt, by myusername - 
2016-04-17 15:23:19 - Modified file: /path/to/file2.txt, by myusername - 
+2

Der Benutzername kann‘ t während der Laufzeit ändern, so können Sie Ihre Klasse effizienter machen. Rufen Sie 'getpass.getuser()' in der '__init__'-Methode auf und speichern Sie sie als Instanzattribut für die anderen Methoden, auf die zugegriffen werden soll. –

+0

@ PM2Ring - Einverstanden. Wird besorgt. Vielen Dank! –

+1

Dies gibt nur den lokalen Benutzernamen zurück, der die Konsole ausführt. Mein Watchdog überwacht eine Dateifreigabe, wie kann ich den Client Benutzernamen/Hostnamen zurückgeben? – ChristianG

Verwandte Themen