我正在编写一个python(2.7)脚本来使用正则表达式从java应用程序解析一些日志。 我使用http://pythex.org/帮助测试模式,他们在那里使用减少的日志样本就可以了。
一旦我在我的脚本上执行相同的操作,如果我将一些日志放在一个变量中,它就会起作用,但是如果我把它指向一个文件就不会工作。
这是代码
import re
regex_sql_java_error = "\[use.(.*?)\]\nThread:.{9}(GENERAL|LOADER).{17}(ERROR(.*?)\n)"
logfile = open('example_files/Log_file.txt', 'r')
data = logfile.read()
logfile.close()
filtered = re.finditer(regex_sql_java_error, data, re.DOTALL | re.MULTILINE)
if filtered:
for item in filtered:
print item.group(0)
我使用的日志文件是一个可怜的1MB文件。
我无法想象这个模式是个问题,但是这个日志文件的样本在pythex.org上匹配得很好
Thread: 5624 LOADER 08:26:37.078 INFO executeDdlStatements:
[use ADMINI;, SOME BROKEN SQL HERE;]
Thread: 5624 LOADER 08:26:37.086 ERROR 'executeDdlStatements' command failed with the error: Table 'ADMININTT' doesn't exist
RANDOM JAVA STUFF
在pythex http://goo.gl/mZSx4z
上链接到它我一直在抨击这几天,阅读了一堆文档,但我无法弄清楚我做错了什么。
希望它真的很蠢我以后可以笑一点。
无论如何,如果有人能指出我正确的方向,我真的很感激。
答案 0 :(得分:0)
这是愚蠢和快速的,就像我想的那样,我现在可以笑了。
日志文件来自windows,替换为\ n \ r \ n \ n \ r \ n各处都很开心!