suchen

Heim  >  Fragen und Antworten  >  Hauptteil

php – So konvertieren Sie das reguläre Nginx-Protokollformat in das Apache-Protokollformat

Nginx-Protokollformat

log_format  access  '$remote_addr - [$time_local] "$request" '
             '$status $body_bytes_sent $request_time "$http_referer" '
             '"$http_user_agent" - $http_x_forwarded_for';

Das Folgende ist das reguläre Protokollextraktionsformat von Nginx

log_pattern = r'^(?P<remote_addr>.*?) - \[(?P<time_local>.*?)\] "(?P<request>.*?)"' \
              r' (?P<status>.*?) (?P<body_bytes_sent>.*?) (?P<request_time>.*?)' \
              r' "(?P<http_referer>.*?)" "(?P<http_user_agent>.*?)" - (?P<http_x_forwarded_for>.*)$'

request_uri_pattern = r'^(?P<request_method>(GET|POST|HEAD|DELETE)?) (?P<request_uri>.*?) (?P<server_protocol>HTTP.*)$'

Mein Apache-Protokollformat ist wie folgt:

123.125.71.55 - - [14/Apr/2017:00:00:15 +0800] "GET /article/511615 HTTP/1.1" 200 11238
111.206.221.100 - - [14/Apr/2017:00:00:16 +0800] "POST /baidutj/tj HTTP/1.1" 302 -

Wie man den obigen regulären Ausdruck in einen regulären Ausdruck umwandelt, den ich verwenden kann,

Ich habe es lange versucht, bekam aber immer wieder Fehler,

大家讲道理大家讲道理2822 Tage vor463

Antworte allen(1)Ich werde antworten

  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:15:53

    log_pattern = (r'^(?P<remote_addr>\S+) - - \[(?P<time_local>[^]]+)\] "(?P<request>.*?)"'
                  ' (?P<status>\d+) (?P<body_bytes_sent>\d+)')
    request_uri_pattern = r'"(?P<request_method>(?:GET|POST|HEAD|DELETE)?) (?P<request_uri>\S*) (?P<server_protocol>HTTP\S*?")'

    Antwort
    0
  • StornierenAntwort