1

我需要监视由jPos. 日志输出如下所示:

<log realm="channel/10.10.23.81:18090" at="2015-02-08 00:00:19.540 CET" lifespan="9019ms">
  <receive>
    <isomsg direction="incoming">
      <!-- org.jpos.iso.packager.GenericPackager[cfg/iso93ascii.xml] -->
      <field id="0" value="1804"/>
      <field id="7" value="20150208000019"/>
      <field id="11" value="399335"/>
      <field id="24" value="831"/>
    </isomsg>
  </receive>
</log>
<log realm="channel/10.10.23.81:18090" at="2015-02-08 00:00:19.540 CET">
  <send>
    <isomsg direction="outgoing">
      <!-- org.jpos.iso.packager.GenericPackager[cfg/iso93ascii.xml] -->
      <field id="0" value="1814"/>
      <field id="7" value="20150208000019"/>
      <field id="11" value="399335"/>
      <field id="24" value="831"/>
      <field id="39" value="800"/>
    </isomsg>
  </send>
</log>

一条消息始终位于日志标签之间,并且可能很长很多行。还可能包含以下错误:

<log realm="channel/10.10.23.81:18090" at="2015-02-06 00:01:58.728 CET" lifespan="26768ms">
  <receive>
    <iso-exception>
      org.jpos.iso.IFA_LLNUM: Problem unpacking field 56 (org.jpos.iso.ISOException: Field length 37 too long. Max: 35) unpacking field=56, consumed=282
      org.jpos.iso.ISOException: org.jpos.iso.IFA_LLNUM: Problem unpacking field 56 (org.jpos.iso.ISOException: Field length 37 too long. Max: 35) unpacking field=56, consumed=282
        at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:265)
        at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:420)
        at org.jpos.iso.BaseChannel.unpack(BaseChannel.java:924)
        at org.jpos.iso.BaseChannel.receive(BaseChannel.java:692)
        at org.jpos.q2.iso.ChannelAdaptor$Receiver.run(ChannelAdaptor.java:319)
        at java.lang.Thread.run(Thread.java:745)
    </iso-exception>
    --- data ---
    0000  31 34 32 31 46 36 37 34  30 35 43 35 30 45 45 30  1421F67405C50EE0
0010  41 31 30 30 30 30 30 30  30 30 30 32 30 34 30 30  A100000000010330
0020  30 30 30 30 31 36 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  000045**********
0030  2A 2A 33 34 34 32 30 30  30 30 30 30 30 30 30 30  **35670000000000
0040  30 30 30 31 38 30 30 30  30 30 30 30 30 30 30 31  0001800000000001
  </receive>
</log>

我想grep通过特定的时间戳(“2015-02-06 16:”)和字符串(如 ORA、iso-exception、...)来完整的一条消息,并逐行获得漂亮的输出(作为原始外观)。日志文件很大,我尝试对jPos任何故障进行监控,并将结果发送到电子邮件,所以应该是可读的。

有什么想法吗?

4

1 回答 1

1

我找到了解决方案。perl通过以下方式将输出、grep变量和格式再次合并为 xml tiny

log_file=/path/q2.log
log_hour="2015-02-06 10"
file_to_send=/path/email.txt
tidy_temp=/tmp/tidy.temp

perl -pe 's|\n|| ; s|</log>|</log>\n|' $log_file |grep $log_hour |grep -e "ORA-" -e "iso-exception"| tidy -f $tidy_temp -o $file_to_send -i -xml -
于 2015-02-09T09:15:57.857 回答