Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Combine tail -F and json

Tags:

json

tail

My log files have one json object per line. I use [json][1] to get a human readable output via

cat mylog.log | json -a field1 field2

Now I would like to have

tail -F mylog.log | json -a field1 field2

for a continuous output. But this seems not to work, the shell simply hangs. If I use &| to avoid buffering issues, the output is as if I only run cat.

mylog.log looks like this:

{"field1": entry1a, "field2": entry2a, "field3": entry3a}
{"field1": entry1b, "field2": entry2b, "field3": entry3b}

Any suggestions?

[1] https://github.com/trentm/json

like image 984
osdf Avatar asked Mar 12 '12 13:03

osdf


1 Answers

It's looks like json first loads the whole stdin into a buffer and only then processes the data, but you should still be able to achieve stream processing by calling it for each of the lines added to the log file, something like this:

tail -F mylog.log | while read line; do echo "$line" | json -a field1 field2; done
like image 119
Jakub Roztocil Avatar answered Oct 15 '22 05:10

Jakub Roztocil