我想使用Xquery从查询控制台读取MarkLogic日志(例如:ErrorLog.txt)。我有以下代码,但问题是输出格式不正确。结果如下所示
xquery version "1.0-ml";
for $hid in xdmp:hosts()
let $h := xdmp:host-name($hid)
return
xdmp:filesystem-file("file://" || $h || "/" ||xdmp:data-directory($hid) ||"/Logs/ErrorLog.txt")
问题是按主机来的,就像先出现一个主机的所有日志,然后在运行Xquery之后从主机2的时间00:00:01开始,然后从主机3的00:00:01开始一样。
2019-07-02 00:00:35.668 Info: Merging 2 MB from /cams/q06data02/testQA2/Forests/testQA2-2.2/0002b4cd to /cams/q06data02/testQA2/Forests/testQA2-2.2/0002b4ce, timestamp=15620394303480170
2019-07-02 00:00:36.007 Info: Merged 3 MB at 9 MB/sec to /cams/q06data02/testQA2/Forests/test2-2.2/0002b4ce
2019-07-02 00:00:38.161 Info: Deleted 3 MB at 399 MB/sec /cams/q06data02/test2/Forests/test2-2.2/0002b4cd
是否可以获得带有日志条目中包含的主机名的输出,以及是否可以按时间轴对输出进行排序,例如
host 1 : 2019-07-02 00:00:01 : Info Merging ....
host 2 : 2019-07-02 00:00:02 : Info Deleted 3 MB at 399 MB/sec ...
答案 0 :(得分:3)
日志文件是文本文件。您可以像对其他任何文本文件一样对其进行解析和排序。 尽管它们会变得非常大(GB +),所以简单的方法可能效果不佳。 另外,您需要能够将文本解析为字段,以便按字段排序。 由于每行的前20个字节是时间戳记,并且时间戳采用与日期在词汇上相同的ISO格式,因此您可以按行分割文件,并使用基本的冷却方式对文件进行按时间排序。 在V9中,可以使用xdmp:logfile-scan和xdmp:logmessage-parse对有效地搜索日志文件(远程和本地),然后将结果转换为文本,XML(属性或元素格式)或JSON。一个人也可以使用REST API。 参见:https://docs.marklogic.com/REST/GET/manage/v2/logs
将日志文件(理想情况下,日志消息的选定子集足够小以进行管理)转换为结构化格式(xml,json或文本行),然后即可轻松进行排序,搜索,丰富等。
要获得更好的效果,请查看Ops Director https://docs.marklogic.com/guide/opsdir/intro