我在Solaris中使用Jboss 4.0.2来运行webapp。
JBoss配置为使用出厂默认的log4j.xml文件,并且它有一个ConsoleAppender。我正在将jboss java进程的stdout重定向到一个文件。
当我尝试清理这个文件时会发生一些有趣的事情 - jboss.out。
这是我开始的地方。
$ ls -alhrt jboss.out
-rw-r--r-- 1 ipunity ipunity 458M Jan 8 07:22 jboss.out
然后我清理这个文件。 Jboss还在运行。
$ >jboss.out
$ ls -alhrt jboss.out
-rw-r--r-- 1 ipunity ipunity 0 Jan 8 07:24 jboss.out
现在如果点击我的webapp中的链接,就会开始记录,但整个文件会再次出现!
$ ls -alhrt jboss.out
-rw-r--r-- 1 ipunity ipunity 458M Jan 8 07:25 jboss.out
关于最新进展的任何想法?
ConsoleAppender缓冲数据吗?我没有足够的内存来容纳458MB,我的磁盘交换几乎未使用。我也没有看到任何临时文件这么大。
答案 0 :(得分:2)
这可能是一个稀疏文件,由操作系统创建,当JBoss发出写入时,文件指针设置为+ [无论文件的旧大小是什么]。
检查新文件实际使用的磁盘空间 - 在大多数unices上,du -k jboss.out
应该有效。如果文件稀疏,您应该会看到明显小于ls
所示大小的内容。
通常,在写入日志文件时删除它们很棘手。为了在捕获stdout时避免这个问题,我倾向于将stdout传递给cronolog或rotatelogs之类的程序,而不是直接传递给文件。