我有服务器程序,用 C++ 编写。我通常以
开始db_net 2> log_file
我没有使用任何特殊的日志记录,只是在 stderr 上打印。
但是有时,log_file 会变得很大。如果我这样做
echo > log_file
没有效果,文件不会被清零。我知道这在 10 年前有效,但现在不行了。
问题如下:
我知道 MySQL 使用
flush logs;
执行此操作,apache / nginx 也可以执行相同的操作,但是它们知道文件名,并且在它们的情况下很容易重新打开。
我知道我可以在配置中实现日志文件,但目前我正在寻找快速的解决方案。
文件系统是XFS。
单独截断文件不会更改
stderr
文件描述符的文件偏移量。
从应用程序中您可以致电:
ftruncate(2, 0);
lseek(2, 0, SEEK_SET);
使用追加模式:
db_net 2>> log_file
现在,当您手动截断文件时,该过程将继续附加到新的空文件。