自定义应用程序上的日志轮换问题

问题描述 投票:0回答:2

我有服务器程序,用 C++ 编写。我通常以

开始
db_net 2> log_file

我没有使用任何特殊的日志记录,只是在 stderr 上打印。

但是有时,log_file 会变得很大。如果我这样做

echo > log_file

没有效果,文件不会被清零。我知道这在 10 年前有效,但现在不行了。

问题如下:

  • 可以从操作系统端以某种方式修复此问题(我在 Linux 上运行),而无需重新启动应用程序
  • 如果无法从操作系统修复此问题,我可以从应用程序修复此问题吗?我可以关闭和打开 stderr,但我真的不知道 stderr 指向的文件名,因为它被重定向了。 C解也可以。

我知道 MySQL 使用

flush logs;
执行此操作,apache / nginx 也可以执行相同的操作,但是它们知道文件名,并且在它们的情况下很容易重新打开。

我知道我可以在配置中实现日志文件,但目前我正在寻找快速的解决方案。

文件系统是XFS。

c++ c linux stderr
2个回答
0
投票

单独截断文件不会更改

stderr
文件描述符的文件偏移量。

从应用程序中您可以致电:

ftruncate(2, 0);
lseek(2, 0, SEEK_SET);

0
投票

使用追加模式:

db_net 2>> log_file

现在,当您手动截断文件时,该过程将继续附加到新的空文件。

© www.soinside.com 2019 - 2024. All rights reserved.