【问题标题】:How to combine log exception from multiple lines to one line如何将日志异常从多行合并到一行
【发布时间】:2017-04-24 17:05:46
【问题描述】:

我有一个包含异常的日志文件,其中异常位于不同的行。我想让 sed/awk/cut 将它们组合在一起。规则。第一行的开头总是有一个日期时间戳。

示例:(5行例外)

2017-04-24T04:26:58.728-0400 - VALUE {tomcat-device-http-1} none|none 
[{{0ecfe8a7}{Uri, - WARN Could not marshal entity
java.lang.ArrayIndexOutOfBoundsException: -1
    at com.sun..java:487)
    at com.sun:323)
    at com.sun.java:251)

最终结果:

2017-04-24T04:26:58.728-0400 - VALUE {tomcat-device-http-1} none|none [{{0ecfe8a7}{Uri, - WARN Could not marshal entity java.lang.ArrayIndexOutOfBoundsException: -1 at com.sun..java:487) at com.sun:323) at com.sun.java:251)

【问题讨论】:

  • 没有其他东西以日期时间戳开头?
  • [batch-file] 标签似乎是错误的,因为工具(awk、sed、tr)通常不存在于 windows 环境中。
  • 您是在 DOS 上运行,还是在 Windows 命令行终端上运行?您确定要在一行中全部完成吗?即使堆栈跟踪中有一百个级别(这是我在 Java 堆栈跟踪中经常看到的)。

标签: batch-file awk sed tr


【解决方案1】:

以下是使用JREPL.BAT - a regular expression text processor 的简单高效(快速)解决方案。 JREPL.BAT 是纯脚本(混合批处理/JScript),可以在 XP 以后的任何 Windows 机器上本地运行 - 不需要第 3 方 exe 文件。

以下将直接从命令行运行,不需要批处理文件。

如果日志文件 test.log 已经存在并且你想在屏幕上看到输出,那么:

jrepl "^(?:(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d.\d{3}-\d{4} -)|\s*)(.*)" "stdout.write(($1?'\n'+$1:'  ')+$2);$txt=false" /jmatchq /f test.log

如果要将结果写入文件“output.log”,则附加/o output.log

如果要覆盖原文件,则追加/o -

如果要将命令放入批处理脚本中,请使用call jrepl

如果您有一个将日志写入标准输出的程序,那么您可以将程序输出通过管道传输到命令并删除/f 选项。

logGeneratingCommand | jrepl "^(?:(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d.\d{3}-\d{4} -)|\s*)(.*)" "stdout.write(($1?'\n'+$1:'  ')+$2);$txt=false" /jmatchq 

显然您可以添加/o outfile/o - 选项。

使用管道时,批处理脚本中不需要CALL

完整的 JREPL 文档可通过命令行通过jrepl /?jrepl /?? 获得分页帮助。可通过jrepl /?options 获得选项汇总列表。使用 jrepl /?help 获取所有帮助选项的完整列表。

【讨论】:

    【解决方案2】:

    这个批处理文件做你想做的事:

    @echo off
    setlocal EnableDelayedExpansion
    
    (
    for /F "delims=" %%a in (input.txt) do (
       set "line=%%a"
       if "!line:~0,2!" equ "20" echo/
       set /P "=%%a "
    )
    echo/
    ) < NUL > output.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多