简体   繁体   English

在 python 中使用 readlines() 读取日志文件

[英]read log file by using readlines() in python

I have sample log file in which for each msisdn value(eg "msisdn":"22969000034") there are 3 different state values like (eg '"state":"COMPLETED"', '"state":"IN_PROGRESS"' & "state":"ENTERED").我有示例日志文件,其中对于每个 msisdn 值(例如“msisdn”:“22969000034”)有 3 个不同的状态值,例如(例如 '"state":"COMPLETED"', '"state":"IN_PROGRESS"' & “状态”:“输入”)。 I have to create a report which contains column as "msisdn (which contains msisdn field value), requestID (which contains requestID field value), state1 (which contains state field value as ENTERED), state2 (which contains state field value as IN_PROGRESS), state3 (which contains state field value as COMPLETED), text (which contains text field value only if state value is COMPLETED for msisdn else if state value is IN_PROGRESS/ENTERED it will be 'NA' ) ".我必须创建一个报告,其中包含“msisdn(包含 msisdn 字段值)、requestID(包含 requestID 字段值)、state1(包含状态字段值为 ENTERED)、state2(包含状态字段值为 IN_PROGRESS)”的列, state3(包含状态字段值作为 COMPLETED),文本(仅当状态值为 msisdn 完成时才包含文本字段值,否则如果状态值为 IN_PROGRESS/ENTERED,它将是 'NA' )”。

Log file:日志文件:

{"methodName":"offlineNotifQueueListener()","className":"com.ericsson.ms.business.jms.listener.impl.ActiveMqListener","text":"Processing Offline request","errorText":"NA","status":"NA","requestID":"OFFLINE_Notification_10.10.46.95_e6444dbc-b7ef-41d6-9111-eaa384717b27","orgTransactionID":"895139242296900003","msisdn":"22969000034","action":"Notification","input":"pre_Adhoc","sourceChannel":"OFFLINE","product":"1399","transactionDateTime":"2020-03-24T22:59:59+0100","state":"ENTERED"} {"methodName":"addNotificationText()","className":"com.ericsson.ms.business.service.notification.impl.MSProductNotificationImpl","text":"Evaluating notification for product : 1399","errorText":"NA","status":"NA","requestID":"OFFLINE_Notification_10.10.46.95_e6444dbc-b7ef-41d6-9111-eaa384717b27","orgTransactionID":"895139242296900003","msisdn":"22969000034","action":"Notification","input":"pre_Adhoc","sourceChannel":"OFFLINE","product":"1399","transactionDateTime":"2020-03-24T22:59:59+0100","state":"IN_PROGRE {"methodName":"offlineNotifQueueListener()","className":"com.ericsson.ms.business.jms.listener.impl.ActiveMqListener","text":"处理离线请求","errorText":"NA" ,"status":"NA","re​​questID":"OFFLINE_Notification_10.10.46.95_e6444dbc-b7ef-41d6-9111-eaa384717b27","orgTransactionID":"8951392422969","action203","action203"00003"0003"通知","input":"pre_Adhoc","sourceChannel":"OFFLINE","product":"1399","transactionDateTime":"2020-03-24T22:59:59+0100","state":" ENTERED"} {"methodName":"addNotificationText()","className":"com.ericsson.ms.business.service.notification.impl.MSProductNotificationImpl","text":"正在评估产品通知:1399"," errorText":"NA","status":"NA","re​​questID":"OFFLINE_Notification_10.10.46.95_e6444dbc-b7ef-41d6-9111-eaa384717b27","orgTransactionID":"8951390":"895139024209230"2009"2009" ,"action":"通知","input":"pre_Adhoc","sourceChannel":"OFFLINE","product":"1399","transactionDateTime":"2020-03-24T22:59:59+0100" ,"state":"IN_PROGRE SS"} {"methodName":"executeConstraint()","className":"com.ericsson.ms.business.service.constraint.impl.MSConstraintsImpl","text":"Executing constraint : OfferCHeck","errorText":"NA","status":"NA","requestID":"OFFLINE_Notification_10.10.46.95_e6444dbc-b7ef-41d6-9111-eaa384717b27","orgTransactionID":"895139242296900003","msisdn":"22969000034","action":"Notification","input":"pre_Adhoc","sourceChannel":"OFFLINE","product":"NA","transactionDateTime":"2020-03-24T22:59:59+0100","state":"IN_PROGRESS"} {"methodName":"getValueFromAIR()","className":"com.ericsson.ms.business.service.templateparam.impl.TemplateParamServiceImpl","text":"Evaluating parameter --\> ${OFFER_123089_VALUE}","errorText":"NA","status":"NA","requestID":"OFFLINE_Notification_10.10.46.95_e6444dbc-b7ef-41d6-9111-eaa384717b27","orgTransactionID":"895139242296900003","msisdn":"22969000034","action":"Notification","input":"pre_Adhoc","sourceChannel":"OFFLINE","product":"1399","transactionDateTime":"2020-03-24T22:59:59+0100", SS"} {"methodName":"executeConstraint()","className":"com.ericsson.ms.business.service.constraint.impl.MSConstraintsImpl","text":"执行约束:OfferCHECK","errorText" :"NA","status":"NA","re​​questID":"OFFLINE_Notification_10.10.46.95_e6444dbc-b7ef-41d6-9111-eaa384717b27","orgTransactionID":"895139242209"6900000" action":"通知","input":"pre_Adhoc","sourceChannel":"OFFLINE","product":"NA","transactionDateTime":"2020-03-24T22:59:59+0100"," state":"IN_PROGRESS"} {"methodName":"getValueFromAIR()","className":"com.ericsson.ms.business.service.templateparam.impl.TemplateParamServiceImpl","text":"评估参数 --\\ u003e ${OFFER_123089_VALUE}","errorText":"NA","status":"NA","re​​questID":"OFFLINE_Notification_10.10.46.95_e6444dbc-b7ef-41d6-9111-eaa384719"300000000ID":"630205" ,"msisdn":"22969000034","action":"通知","input":"pre_Adhoc","sourceChannel":"OFFLINE","product":"1399","transactionDateTime":"2020-03- 24T22:59:59+0100", "state":"IN_PROGRESS"} {"methodName":"executeCommand","className":"com.ericsson.ms.business.service.templateparam.impl.TemplateParamServiceImpl","text":"Executing AIR command ---\> GetOffers","errorText":"NA","status":"NA","requestID":"OFFLINE_Notification_10.10.46.95_e6444dbc-b7ef-41d6-9111-eaa384717b27","orgTransactionID":"895139242296900003","msisdn":"22969000034","action":"Notification","input":"pre_Adhoc","sourceChannel":"OFFLINE","product":"1399","transactionDateTime":"2020-03-24T22:59:59+0100","state":"COMPLETED"} "state":"IN_PROGRESS"} {"methodName":"executeCommand","className":"com.ericsson.ms.business.service.templateparam.impl.TemplateParamServiceImpl","text":"执行AIR命令--- \> GetOffers","errorText":"NA","status":"NA","re​​questID":"OFFLINE_Notification_10.10.46.95_e6444dbc-b7ef-41d6-9111-eaa384717b27","orgTransactionID":"20.46"80" msisdn":"22969000034","action":"通知","input":"pre_Adhoc","sourceChannel":"OFFLINE","product":"1399","transactionDateTime":"2020-03-24T22: 59:59+0100","state":"完成"}

The code that i am using is giving output only from first line of log file.我正在使用的代码仅从日志文件的第一行给出输出。 How can i read the complete file to get desired output?如何读取完整文件以获得所需的输出?

code:代码:

with open('home/msLog.log', 'r') as f:
    data = '['+f.readlines()[0].replace('} {','}, {')+']'
    print(data)
    data1 = json.loads(data)
#    print(data1)
    #i += 1
    for x in data1:
    #print(f"msisdn: {x['msisdn']}, status: {x['state']}, requestID: {x['requestID']}")
        print(x['msisdn'],x['state'],x['product'])
    if x['state'] == 'ENTERED':
        msd = x['msisdn']
        RID = x['requestID']
        state1 = x['state']
        value = msd, RID, state1
        list1.append(value)
    elif x['state'] == 'IN_PROGRESS' and x['msisdn'] == msd:
        state2 = x['state']
        list1.append(state2)
    elif x['state'] == 'COMPLETED' and x['msisdn'] == msd:
        state3 = x['state']
        text = x['text']
        value = state3, text
        list1.append(value)
print(list1)

It looks like the file is in jsonlines format - each line is a separate json object.看起来文件是 jsonlines 格式 - 每行都是一个单独的 json 对象。 So you can deserialise line by line, like this:因此,您可以逐行反序列化,如下所示:

with open('home/msLog.log', 'r') as f:
    for line in f:
        x = json.loads(line)

        # Process the line (code unchanged from the question)
        if x['state'] == 'ENTERED':
            msd = x['msisdn']
            RID = x['requestID']
            state1 = x['state']
            value = msd, RID, state1
            list1.append(value)
        elif x['state'] == 'IN_PROGRESS' and x['msisdn'] == msd:
            state2 = x['state']
            list1.append(state2)
        elif x['state'] == 'COMPLETED' and x['msisdn'] == msd:
            state3 = x['state']
            text = x['text']
            value = state3, text
            list1.append(value)
print(list1)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM