如何從日誌條目中提取 XML?
我們在日誌中將 XML 消息記錄到下游系統。
我正在嘗試使用
sed
從日誌條目中提取 XML,但不確定如何使用它。這是一個典型的日誌條目:
2018-02-20T10:02:51.395Z|hostname1|user1||Application Name||10062|DEBUG|o.s.i.channel.DirectChannel||postSend (sent=true) on channel 'logger', message: GenericMessage [payload=<?xml version="1.0" encoding="UTF-8" standalone="yes"?><canonMessage xmlns="somenamespace">...the message body...</canonMessage>, headers={quote_format=FpML, id=f572ea65-91dd-a610-7976-5a1e97c16524, quote_message_id=b640bd90-1624-11e8-a904-bd3c0f5af83b_1519120971176, quote_data=Quote Rep, quote_transaction_originator=user1, timestamp=1519120971394}]
如何從 XML 中剝離日誌條目的前端和後端?
上述行的輸出
sed
應為:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><canonMessage xmlns="somenamespace">...the message body...</canonMessage>
grep -o '<?xml.*</canonMessage>' /path/to/log
應該做的伎倆。
-o
選項grep
告訴它只輸出與提供的正則表達式匹配的數據。令人高興的是,您在這裡只討論提取(部分)XML,而不是解析它。
我通過使用下面提到的 sed 命令得到了上面提到的輸出
sed "s/.*payload=//g" input.xml | sed "s/,.*//g"
輸出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><canonMessage xmlns="somenamespace">...the message body...</canonMessage>