3

我有一个连续运行的标准 Ubuntu postgres9.1 安装,我可能不会停止它。

没有针对日志记录目标进行任何具体配置,因此有一个(以某种方式旋转)日志文件 /var/log/postgresqlpostgresql-9.1-main.log。我想,它会抓取进程的标准输出。

我想要的是配置一个不同的文件目标,并且无需重新启动,(对不起,没有收集器,没有系统日志......那些需要重新启动)但是通过重新配置,新的子进程使用该文件。

那可能吗?谢谢你。

4

2 回答 2

4

I believe this is relatively simple. Sadly it does require the use of the logging collector which would require a restart to enable. Without that you can't move a log between partitions.

You can configure which log is used in: /etc/postgresql/<version>/<cluster>/postgresql.conf

log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log

Once you change this, you will need to do a service postgresql reload to get it to pick up the changes.

Perhaps I should be clear here, that the point of this answer is that you can use service postgresql reload without restarting the server.

于 2012-07-02T21:32:33.947 回答
0

我已经修改了我之前的答案,因为正如 Daniel Vérité 指出的那样,如果不使用 ,则无法设置日志文件logging_collector,该log_filename选项将被忽略。

旋转是通过“复制截断”完成的。那就是 logrotate 制作文件的副本,然后清空主日志文件。

在这种情况下,我认为您会很幸运,因为服务器会打开日志的文件句柄并仅使用该文件句柄进行写入。这意味着您可以简单地重命名文件mv old_name.log new_name.log。postgresql 使用的文件句柄绑定到文件本身而不是名称。

这个解决方案确实存在一个问题,服务器重新启动时,它会在旧名称下创建一个新的日志文件。您将需要进行配置更改,以便在重新启动时继续写入同一位置。

于 2012-07-03T08:01:52.600 回答