2016-11-29 57 views
1

我正在嘗試將AWS Redshift用戶活動日誌(http://docs.aws.amazon.com/redshift/latest/mgmt/db-auditing.html)解析爲對象。如何將AWS Redshift用戶活動日誌解析爲對象?

紅移用戶活動日誌

'2016-11-16T08:00:13Z UTC [ db=dev user=rdsdb pid=30500 userid=1 xid=1520 ]' LOG: SELECT 1 

的Python RedshiftUserActivityLog對象

class RedshiftUserActivtyLog (object):  
     def __init__(self, record_time, db, 
       user, pid, user_id, xid, 
       query): 
     super(RedshiftUserActivtyLog , self).__init__() 

     self.record_time = record_time 
     self.db = db 
     self.user = user 
     self.pid = pid 
     self.user_id = user_id 
     self.xid = xid 
     self.query = query 

我的當前的解決方案是去除象不必要的字符 '[,],UTC,LOG,:' ,將空間分成一個列表。之後,將列表轉換爲對象。

任何人都可以告訴我更好的方式來完成這項任務嗎?

回答

0

您可以更快地編造一個正則表達式,然後填充從本場比賽的groupdict()你的對象,像

regex = re.compile(r'\'(?P<time>[\d\-:T]+)\w UTC \[ db=(?P<db>\w+) user=(?P<user>\w+) pid=(?P<pid>\d+) userid=(?P<userid>\d+) xid=(?P<xid>\d+) \]\' LOG:(?P<query>.*)') 
match = regex.search(log) 
if match: 
    userActivity = RedshiftUserActivtyLog(
     record_time=match.group('time'), 
     db=match.group('db'), 
     user=match.group('user'), 
     pid=match.group('pid'), 
     user_id=match.group('user_id'), 
     xid=match.group('xid'), 
     log=match.group('log') 
    ) 

但實際上你的方式也很合法的,也許。