首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash监视jPos XML日志文件

Bash监视jPos XML日志文件
EN

Stack Overflow用户
提问于 2015-02-08 16:54:18
回答 1查看 621关注 0票数 1

我需要监控由jPos生成的日志文件。日志输出如下所示:

代码语言:javascript
复制
<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>

一条消息总是在日志标记之间,并且可能很长,有很多行。也可能包含错误,如:

代码语言:javascript
复制
<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>

我想通过特定的时间戳("2015-02-06 16:")和字符串(像ORA,iso- grep,...)来异常整个消息。并逐行获得良好的输出(如原始外观)。jPos日志文件很大,我尝试设置任何故障的监控,结果要发送到电子邮件,所以应该是可读性的。

伙计们,你们知道吗?

EN

回答 1

Stack Overflow用户

发布于 2015-02-09 17:15:58

我找到了解决方案。使用perl合并输出,对变量执行grep操作,然后通过tiny再次将其格式化为xml

代码语言:javascript
复制
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 -
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28392215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档