使用XQuery从查询控制台读取MarkLogic日志

使用XQuery从查询控制台读取MarkLogic日志,xquery,marklogic,Xquery,Marklogic,我想使用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/ErrorL

我想使用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")
问题是结果是根据主机来的,就像一台主机的所有日志首先来,然后从主机2的时间00:00:01开始,然后在运行Xquery之后从主机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 ...

日志文件是文本文件。您可以像任何其他文本文件一样对它们进行解析和排序。 虽然它们可以获得非常大的容量(GB+),但简单的方法可能无法执行。 另外,您需要能够将文本解析为字段,以便按字段排序。 由于每行的前20个字节是时间戳,并且该时间戳采用ISO格式,在词汇上与日期排序相同,因此您可以将文件按行拆分,并使用基本列进行排序,以获得多个文件的按时间排序

在V9中,可以使用and对
xdmp:logmessage parse
高效地搜索日志文件(远程和本地),然后将结果转换为文本、XML(属性或元素格式)或JSON

您也可以使用RESTAPI实现同样的功能。 见:

一旦将日志文件(理想情况下是足够小的日志消息的选定子集)转换为结构化格式(xml、json或文本行),就可以轻松地执行排序、搜索和丰富等操作

关于更好的东西,请看Ops Director

RESTAPI为我们做了些什么。谢谢:)