python 分析日志


import os

import re





def analyze_anr_logs(package_name):

"""

分析ANR文件夹下包含指定包名的日志文件

:param package_name: 要分析的包名,如"com.example.app"

"""

anr_folder_path = "根路径" # 假设ANR日志所在文件夹名为anr,可根据实际情况修改

if not os.path.exists(anr_folder_path):

print(f"指定的ANR文件夹 {anr_folder_path} 不存在!")

return 0, 0

total_lines = 0

package_count = 0

for root, dirs, files in os.walk(anr_folder_path):

for file in files:

file_path = os.path.join(root, file)

try:

with open(file_path, 'r', encoding='utf-8') as f: # 以utf-8编码读取文件,可根据实际调整

content = f.read()

total_lines += len(content)

print(f"该值为:{total_lines}")

if package_name in content:

print(f"在文件 {file_path} 中找到与 {package_name} 相关的ANR日志:")

# 提取一些关键信息示例(可根据实际日志格式拓展更详细分析)

# find_main_thread_info(content)

package_count += find_error_info(content, package_name)

find_process_info(content)

find_stack_trace(content)

except UnicodeDecodeError:

print(f"文件 {file_path} 编码格式可能无法以utf-8解码,跳过分析该文件。")

except Exception as e:

print(f"分析文件 {file_path} 时出现错误: {str(e)}")

if total_lines == 0:

return 0, 0

return package_count





def find_main_thread_info(content):

"""

尝试从日志内容中查找主线程相关信息(示例,需根据实际日志格式完善)

:param content: 日志文件的内容

"""

main_thread_keywords = ["main thread", "ActivityThread"]

for keyword in main_thread_keywords:

start_index = content.find(keyword)

if start_index != -1:

end_index = start_index + 10000 # 简单取后面200个字符作为相关信息,可调整

print(f"查找主线程相关信息" + content[start_index:end_index])





def find_error_info(content, package_name):

"""

尝试从日志内容中查找相关报错信息(示例,需根据实际日志格式完善)

:param package_name:

:param content: 日志文件的内容

"""

pattern = re.compile(rf'\b{package_name}\b')

matches = pattern.findall(content)

count = len(matches)

for index, match in enumerate(matches, start=1):

if index != -1:

end_index = index + 10000 # 简单取后面200个字符作为相关信息,可调整

print(f"查找主线程相关信息" + content[index:end_index])

# print(f"字符 '{package_name}' :其后300个字符为:{print_ten_chars}")

print(f"字符 '{package_name}' 在文本中总共出现了 {count} 次")

#

return count





def find_process_info(content):

"""

尝试从日志内容中查找进程相关信息(示例,需根据实际日志格式完善)

:param content: 日志文件的内容

"""

process_keywords = ["Process:", "pid:", "uid:"]

for keyword in process_keywords:

start_index = content.find(keyword)

if start_index != -1:

end_index = start_index + 100 # 简单取后面100个字符作为相关信息,可调整

print(f"查找进程相关信息" + content[start_index:end_index])





def find_stack_trace(content):

"""

尝试从日志内容中查找异常堆栈信息(示例,需根据实际日志格式完善)

:param content: 日志文件的内容

"""

stack_trace_keywords = ["at ", "Caused by:"]

stack_trace_info = ""

for keyword in stack_trace_keywords:

start_index = content.find(keyword)

if start_index != -1:

stack_trace_info += content[start_index:]

if stack_trace_info:

print("异常堆栈信息如下:")

# print(stack_trace_info)





if __name__ == "__main__":

package_name_to_analyze = "com.example.app"

count = analyze_anr_logs(package_name_to_analyze)

print(f"包名 {package_name_to_analyze} ,出现的总次数为: {count} 次")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值