0
私は正規表現を使ってnginxログを解析しています。オプションで正規表現グループ内で一致する
作成しているフィールドの1つが「メッセージ」です。このグループにはJSON文字列が含まれることがあります。
「json」グループを作成するために、私の「メッセージ」グループ内で任意に一致させる方法はありますか?ここで
は私の現在の正規表現です:私が望む何
message: *7895 [lua] auth_client.lua:41: {"applicationName":"nginx-auth-filter", "applicationFunction":"auth-client" ,"logLevel": "DEBUG", "clientId":"ifly","requestId":"72e03798e9826f2c4b076e3779903edf","message":"Checking client credentials"}
されています。私の現在の正規表現で
2017/12/02 12:45:40 [debug] 29#29: *7895 [lua] auth_client.lua:41: {"applicationName":"nginx", "applicationFunction":"auth-client" ,"logLevel": "DEBUG", "clientId":"xyz","requestId":"72e03798e9826f2c4b076e3779903edf","message":"Checking client credentials"}
私はのようなフィールドを取得:
(?<time>\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}) \[(?<log_level>\w+)\] (?<pid>\d+).(?<tid>\d+): (?<message>.*)
ここでは例のメッセージです:
message: *7895 [lua] auth_client.lua:41: {"applicationName":"nginx-auth-filter", "applicationFunction":"auth-client" ,"logLevel": "DEBUG", "clientId":"ifly","requestId":"72e03798e9826f2c4b076e3779903edf","message":"Checking client credentials"}
json: {"applicationName":"nginx-auth-filter", "applicationFunction":"auth-client" ,"logLevel": "DEBUG", "clientId":"ifly","requestId":"72e03798e9826f2c4b076e3779903edf","message":"Checking client credentials"}
ただし、メッセージにjsonが含まれない場合がありますので、グループはオプションにする必要があります。
これはほとんど機能しますが、時にはメッセージを終了しません}。この場合、マッチは機能しません。 たとえば、メッセージ「 」、クライアント:172.19.0.123、サーバー:nginx.services.xxx.com、リクエスト:「POST /イベント/メンバーHTTP/1.1」、ホスト:「api .xxx.com " – wimnat
また、私の更新された正規表現を試してください。それが動作しない場合は、新しいサンプルデータで質問を編集し、予想される一致を表示してください。 – anubhava