在postgresql.conf文件中设置参数(日志文件未被截断)

在postgresql.conf文件中设置参数(日志文件未被截断),postgresql,Postgresql,在我的postgresql.conf文件中,我有以下设置 logging_collector = on log_directory = 'pg_log' log_filename = 'postgresql-%a.log' log_truncate_on_rotation = on log_rotation_size = 10 但我的日志文件在10 KB后不会被截断。请提供帮助。日志截断不会发生,因为postgres提供了一种保护,可以避免截断与其当前登录的日志文件相同的日志文件。否则,这就意

在我的
postgresql.conf
文件中,我有以下设置

logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
log_rotation_size = 10

但我的日志文件在10 KB后不会被截断。请提供帮助。

日志截断不会发生,因为
postgres
提供了一种保护,可以避免截断与其当前登录的日志文件相同的日志文件。否则,这就意味着丢失最新的日志条目,这似乎是不可取的。 事实上,
log\u truncate\u on\u rotation
上的文档说:

但是,只有在打开新文件时才会发生截断 由于基于时间的旋转,而不是在服务器启动期间或基于大小 轮换

要解决此问题,您应该将
log\u文件名
'postgresql-%a.log'
更改为时间粒度与
日志大小
兼容的名称。例如:

log\u filename=postgresql-%a-%H.log

有了这些设置,
log\u truncate\u on\u rotation
的目的是覆盖前一天在同一时间的日志,如果它恰好存在,则覆盖同一应用程序名称


我假设您只是在测试日志旋转功能,因为实际上
10Kb
太小而没有用处,在生产使用中重写以前的日志是可疑的。如果您对日志的大小有严格限制,您应该将postgres完成的日志文件切换与外部cron作业结合起来,后者可以主动删除较旧的日志,而不是仅依赖于
log\u truncate\u on\u rotation

日志截断不会发生,因为
postgres
具有一种保护功能,可以避免截断看起来与日志文件相同的日志文件它当前正在登录的一个。否则,这就意味着丢失最新的日志条目,这似乎是不可取的。 事实上,
log\u truncate\u on\u rotation
上的文档说:

但是,只有在打开新文件时才会发生截断 由于基于时间的旋转,而不是在服务器启动期间或基于大小 轮换

要解决此问题,您应该将
log\u文件名
'postgresql-%a.log'
更改为时间粒度与
日志大小
兼容的名称。例如:

log\u filename=postgresql-%a-%H.log

有了这些设置,
log\u truncate\u on\u rotation
的目的是覆盖前一天在同一时间的日志,如果它恰好存在,则覆盖同一应用程序名称


我假设您只是在测试日志旋转功能,因为实际上
10Kb
太小而没有用处,在生产使用中重写以前的日志是可疑的。如果您对日志的大小有严格限制,您应该将postgres完成的日志文件切换与外部cron作业相结合,后者可以主动删除较旧的日志,而不是仅依赖于
log\u truncate\u on\u rotation

在修改配置文件后是否重新加载postgres?在修改配置文件后是否重新加载postgres?