Формат и красивая печать журнала через хвост - PullRequest
0 голосов
/ 04 июля 2019

У меня есть этот файл журнала, который я проверяю часто, и из-за его формата его довольно легко читать, когда он хорошо напечатан. Я бы хотел сделать это в хвосте.

Регистрирует файл как:

2019-07-04T09:53:04-07:00   some.package.placeholder.stderr {"log": "The content", "foo": "bar", "baz": "blah"}
2019-07-04T10:15:37-07:00   some.package.placeholder.stderr {"log": "I'm actually", "foo": "bar", "baz": "blah"}
2019-07-04T10:15:37-07:00   some.package.placeholder.stderr {"log": "Interested on", "foo": "bar", "baz": "blah"}

И я хочу сделать что-то похожее на

tail -f myLogFile | grep [...?...] | jq '.log'

Итак, когда я пойду на хвост, получу:

The content
I'm actually
Interested on

Или даже:

2019-07-04T09:53:04-07:00   The content
2019-07-04T10:15:37-07:00   I'm actually
2019-07-04T10:15:37-07:00   Interested on

Ответы [ 2 ]

3 голосов
/ 04 июля 2019

С GNU grep для -o:

$ tail file | grep -o '{[^}]*}' | jq -r '.log'
The content
I'm actually
Interested on

С любым awk:

$ tail file | awk 'sub(/.*{/,"{")' | jq -r '.log'
The content
I'm actually
Interested on

$ tail file | awk '{d=$1} sub(/.*{/,""){$0="{\"date\": \""d"\", " $0} 1' | jq -r '.date + " " + .log'
2019-07-04T09:53:04-07:00 The content
2019-07-04T10:15:37-07:00 I'm actually
2019-07-04T10:15:37-07:00 Interested on

Последний работает путем слияния поля даты из входных данных в json, поэтому jq может просто выбрать и распечатать его с полем журнала.

1 голос
/ 05 июля 2019

Если строки журнала разделены табуляцией, вы можете читать строки в необработанном виде и разбивать на вкладки.Что вы могли бы затем проанализировать JSON и отфильтровать по содержанию сердца, и при необходимости рекомбинировать.

$ tail -f myLogFile | jq -Rr 'split("\t") | [.[0], (.[2] | fromjson.log)] | join("\t")'
2019-07-04T09:53:04-07:00   The content
2019-07-04T10:15:37-07:00   I'm actually
2019-07-04T10:15:37-07:00   Interested on
...