解析服务器回溯的正则表达式

1 投票
1 回答
795 浏览
提问于 2025-04-18 13:20

我正在尝试为一个自定义服务器日志设置一个正则表达式,以便提取变量。提取变量的方法是给正则表达式的每个部分命名。下面是一个例子:

/^(?<time>[^ ]+) (?<host>[^ ]+) (?<process>[^:]+): (?<message>((?<key>[^ :]+)[ :])? ?((to|from)=<(?<address>[^>]+)>)?.*)$/ 

我想对一个自定义格式做同样的事情。这个格式如下:

[11/Jul/2014 19:35:38] ERROR [django.request.tastypie:273] Internal Server Error: /v1/notes/
Traceback (most recent call last):
  File "/opt/client-api/venv/local/lib/python2.7/site-packages/tastypie/resources.py", line 195, in wrapper
    response = callback(request, *args, **kwargs)
  File "/opt/client-api/venv/local/lib/python2.7/site-packages/tastypie/resources.py", line 426, in dispatch_list
    return self.dispatch('list', request, **kwargs)
  File "/opt/client-api/venv/local/lib/python2.7/site-packages/tastypie/resources.py", line 458, in dispatch
    response = method(request, **kwargs)
  File "/opt/client-api/venv/local/lib/python2.7/site-packages/tastypie/resources.py", line 1320, in post_list
    updated_bundle = self.obj_create(bundle, **self.remove_api_resource_names(kwargs))
  File "/opt/client-api/venv/local/lib/python2.7/site-packages/tastypie/resources.py", line 2084, in obj_create
    return self.save(bundle)
  File "/opt/client-api/venv/local/lib/python2.7/site-packages/tastypie/resources.py", line 2230, in save
    bundle.obj.save()
  File "./notification/models.py", line 193, in save
    handler.handle_notification()
  File "./notification/handler.py", line 31, in handle
    getattr(self, '_set_{}_payload'.format(preference))()
  File "./notification/notification_handler.py", line 89, in _set_payload
    raise Exception(error)

我关心的只是提取第一行的各种组件,把它们放入变量中,然后把整个错误追踪信息放入一个变量里。

我知道这个问题可能太具体了,但我觉得如果能简单介绍一下适用于这个情况的正则表达式,对很多想解析服务器日志的人来说会很有帮助。

1 个回答

2

你是指类似这样的内容吗?

\[(?P<timestamp>.*?)\] (?P<level>\w+) \[(?P<location>.*?)\] (?P<message>.*?)\n(?P<details>.*?)(?=\n\[|$)

可以查看这个链接:http://regex101.com/r/zS1fN5/1

这个方法在给出的例子中是有效的,但具体效果还要看这个日志格式可能会有什么特殊情况和例外。

撰写回答