2

追加、削除、変更などの変更の特定のパスを監視するために使用python-watchdogしています。時間とメッセージの情報とともに、その変更を行ったユーザーのユーザー名を取得したいと考えています。を見ていてgetpass、ロギング自体の中で変数を探しましたが、何も見つかりませんでした。

手がかりはありますか?私のウォッチドッグコードは以下のとおりです

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()
4

1 に答える 1

4

アップデート

私はこのように私の問題を解決することができました。Method-Overriding を使用して問題を解決しました。Python スクリプトに MyLoggingEventHandler という別のクラスを作成し、getpass.getuser()関数を使用してユーザーの名前を含めました。これで、ログ ステートメントでユーザーの詳細を取得できるようになりました。

コード

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())

これらは私のログ ファイルからの 2 行です。

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 -
于 2016-04-17T09:58:56.233 に答える