首页 > 解决方案 > Tinylog在Windows下写了2GB的废话,在Linux下它的表现已经预料到了。这可能是什么原因造成的?

问题描述

我最近将使用 Tinylog 的日志记录支持添加到我正在开发的 Java 应用程序中。我正在 Linux(Kubuntu 最新)下开发并部署到 Windows 服务器。该应用程序是使用 Gradle 任务构建的,该任务设置了一个“胖 jar”,因此我在部署时不必担心依赖关系。应用程序的角色是访问 REST API,检查数据的完整性,然后使用 JDBC 将收集的数据加载到数据仓库中。

Tinylog 已配置为写入可执行 jar 存档 (IE ../../foo.log) 上方两个子目录的文件,并且在我的开发机器上的 Linux 下,它的行为完全符合预期。日志中的新条目被附加到文件中,它完全符合日志文件的预期。当我从 IDE 运行程序并从 shell 运行独立 jar 时,都会发生这种情况。但是,当我将我的 jar 部署到 Windows 服务器并从 PowerShell 运行它时,它的行为方式非常奇怪。每当将任何内容(无论多么小)附加到日志文件时,该文件都会立即增长到大约 2GB 的大小,并且显然什么都没有。我对 Windows 的了解还不够,无法单独诊断。

od在 Linux 上使用过查看实际写入日志文件的内容,结果如下:

0000000 032461 032472 035071 033465 030456 032062 044440 043116
0000020 035117 051440 060564 072162 062145 066040 063557 062547
0000040 005162 032461 032472 035071 033465 031056 032460 044440
0000060 043116 035117 046040 060557 062544 020144 052110 050124
0000100 044440 005117 032461 032472 035071 033465 031056 033460
0000120 044440 043116 035117 051040 067165 064556 063556 064440
0000140 020156 067516 042040 072141 061141 071541 020145 067515
0000160 062544 030412 035066 030060 030072 027062 030063 020061
0000200 047111 047506 020072 067507 020164 067145 070144 064557
0000220 072156 020163 067546 020162 033466 020062 061541 062543
0000240 071563 070040 064557 072156 005163 000000 000000 000000
0000260 000000 000000 000000 000000 000000 000000 000000 000000
*
17777777760 000000 000000 000000 000000 000000 000000 000000 030400
20000000000 035066 030460 032472 027060 033060 020064 047111 047506
20000000020 020072 072123 071141 062564 020144 067554 063547 071145
20000000040 005015 033061 030072 035061 030065 034456 034060 044440
20000000060 043116 035117 046040 060557 062544 020144 052110 050124
20000000100 044440 006517 030412 035066 030460 032472 027065 032462
20000000120 020062 047111 047506 020072 067514 062141 062145 042040
20000000140 072141 061141 071541 020145 047511 005015 033061 030072
20000000160 035062 031060 034456 034463 044440 043116 035117 043440
20000000200 072157 062440 062156 067560 067151 071564 063040 071157
20000000220 033040 031467 060440 061543 071545 020163 067560 067151
20000000240 071564 005015
20000000244

ASCII 转储是:

0000000   1   5   :   5   9   :   5   7   .   1   2   4       I   N   F
0000020   O   :       S   t   a   r   t   e   d       l   o   g   g   e
0000040   r  \n   1   5   :   5   9   :   5   7   .   2   0   5       I
0000060   N   F   O   :       L   o   a   d   e   d       H   T   T   P
0000100       I   O  \n   1   5   :   5   9   :   5   7   .   2   0   7
0000120       I   N   F   O   :       R   u   n   n   i   n   g       i
0000140   n       N   o       D   a   t   a   b   a   s   e       M   o
0000160   d   e  \n   1   6   :   0   0   :   0   2   .   3   0   1    
0000200   I   N   F   O   :       G   o   t       e   n   d   p   o   i
0000220   n   t   s       f   o   r       6   7   2       a   c   c   e
0000240   s   s       p   o   i   n   t   s  \n  \0  \0  \0  \0  \0  \0
0000260  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
17777777760  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0   1
20000000000   6   :   0   1   :   5   0   .   0   6   4       I   N   F   O
20000000020   :       S   t   a   r   t   e   d       l   o   g   g   e   r
20000000040  \r  \n   1   6   :   0   1   :   5   0   .   9   0   8       I
20000000060   N   F   O   :       L   o   a   d   e   d       H   T   T   P
20000000100       I   O  \r  \n   1   6   :   0   1   :   5   5   .   2   5
20000000120   2       I   N   F   O   :       L   o   a   d   e   d       D
20000000140   a   t   a   b   a   s   e       I   O  \r  \n   1   6   :   0
20000000160   2   :   0   2   .   9   3   9       I   N   F   O   :       G
20000000200   o   t       e   n   d   p   o   i   n   t   s       f   o   r
20000000220       6   7   3       a   c   c   e   s   s       p   o   i   n
20000000240   t   s  \r  \n
20000000244

这是 的全部输出od,看起来null在两个条目之间写入了 2 GB。第一个条目在 Linux 下运行,第二个在 Windows 下运行。我不明白是什么导致 Tinylog 以这种方式行事,有人能对此有所了解吗?

标签: javawindowswindows-servertinylog

解决方案


推荐阅读