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>

1 つのメッセージは常にログ タグの間にあり、何行にもわたって長くなる可能性があります。次のようなエラーが含まれている可能性もあります。

<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 など) で 1 つのメッセージ全体を作成し、行ごとに適切な出力を取得したいと考えています (元のように)。ログファイルは巨大です。jPos誤動作を監視するように設定し、結果を電子メールで送信したいので、読み取り可能である必要があります。

アイデアはありますか?

4

1 に答える 1

1

私は解決策を見つけます。perl、変数を使用して出力をマージし、次の方法でgrepxml に再度フォーマットします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 に答える