我们有 apache 提供文件并通过我们的 api 代理请求,今天日志中出现了一个我无法解释的新东西。
我正在调查导致停机的问题,查看访问日志时,我可以看到最后一个请求和恢复在线后第一个有效的请求,但中间有几行带有 @s 和 ^s 的字符,我无法解释。我正在寻找一种解释,以了解是什么原因导致这些字符打印在访问日志的中间。
我唯一能猜到的是,硬件错误可能以某种方式损坏了正在写入该文件的下一个条目。不知道我还能在这里寻找什么?
[29/May/2020:12:04:00 +0000] "PUT /api/orders/2657675?cacheBuster=1590753840180 HTTP/1.1" 200 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
[29/May/2020:12:17:47 +0000] "GET /favicon.ico HTTP/1.1" 200 5430 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/79.0.3945.73 Mobile/15E148 Safari/604.1"
答案1
^@
是 NUL(0x00)字节的典型可视化。
几乎可以肯定,您用来显示文件的工具将 NUL 字节序列可视化为这个 序列^@
,而文件本身没有^
或@
字符。
(通常,对于这种无法打印的字符的可视化,会使用反转颜色,只是为了突出显示正在发生一些特殊的事情。)
很可能这个日志文件是在机器突然关闭时写入的,导致文件最后出现一串 NUL 字节,这是由于文件系统对写入操作的某些特定处理在中途被中断所导致的。