我需要在 MarkLogic 中获取文本文件大小。我正在阅读日志文件,我想知道日志在特定日期增长了多少。
下面是我写的代码:
xquery version "1.0-ml";
declare function local:convertToKilobytes($sizeInCharacters as xs:integer) as xs:decimal
{
$sizeInCharacters * 2 div 1024
};
let $error-log := "C:\Program Files\MarkLogic\Data\Logs\ErrorLog.txt"
let $logLines := fn:tokenize(xdmp:filesystem-file($error-log), '\r?\n')
let $uniqueDates := distinct-values(
for $line in $logLines
let $logDate := fn:substring($line, 1, 10)
where $logDate ne ''
return $logDate
)
let $currentSize := sum(for $line in $logLines return string-length($line))
let $logEntries :=
for $date in $uniqueDates
let $sizeInCharacters := sum(for $l in $logLines where fn:contains($l, $date) return string-length($l))
let $sizeInKilobytes := local:convertToKilobytes($sizeInCharacters)
return
<log-entry date="{$date}" size-in-kilobytes="{$sizeInKilobytes}"/>
return
<log-growth>{ $logEntries }</log-growth>
从上面的代码我得到的结果是:
<log-growth>
<log-entry date="2023-09-11" size-in-kilobytes="75.05859375">
</log-entry>
</log-growth>
当我通过左键单击文件检查系统然后转到属性时,它显示磁盘大小:128 KB 和大小:38 KB。那么为什么我没有得到系统显示的结果呢? MarkLogic 中是否有任何特定功能,以便我可以获得系统显示的结果?非常感谢任何建议。
xdmp:filesystem-file-length()
指向 ErrorLog.txt 文件:
xdmp:filesystem-file-length("C:\Program Files\MarkLogic\Data\Logs\ErrorLog.txt")
这将返回以字节为单位的大小,然后您可以转换为所需的单位。