2012-03-12 4 views
4

В моих файлах журнала есть один объект json для каждой строки. Я использую [JSON] [1], чтобы получить удобочитаемый выход черезКомбинированный хвост -F и json

cat mylog.log | json -a field1 field2 

Теперь я хотел бы иметь

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

для непрерывного производства. Но это похоже не на работу , оболочка просто висит. Если я использую &| до , избегайте проблем с буферизацией, выход выглядит как Я только запускаю cat.

mylog.log выглядит следующим образом:

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

Любые предложения?

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

+0

'& |'? какая это оболочка? –

+0

'zsh', но я думаю, что он не делает то, что я думал ... – osdf

+0

Возможно, вы захотите взглянуть на https://bitbucket.org/bartswen/bsonify/ –

ответ

10

Это выглядит как jsonfirst loads the whole stdin into a buffer and only then processes the data, но вы все равно должны быть в состоянии достигнуть обработки потока, вызвав его для каждого из добавленных строк в лог-файл, что-то вроде этого:

tail -F mylog.log | while read line; do echo "$line" | json -a field1 field2; done 
+0

' echo '$ line "'. –

+0

@KarolyHorvath Хорошая точка. Исправлена. –

+1

У меня был некоторый json с беглыми обратными косыми чертами - класс: "путь \\ до \\ класс". Чтобы сохранить их, мне пришлось изменить инструкцию чтения для чтения строки -r, которая их сохраняет – dastra

Смежные вопросы