日志配置
# 启动日志收集, 这是一个后台进程,抓取发送到stderr的日志消息,并会将他们重定向到日志文件。
logging_collector = on
# 日志输出路径,可以是自定义绝对路径或相对于数据目录 PGDATA 的相对路径
log_directory = 'log'
# 文件名,可以带上格式字符串
# 保留一周,每天一个文件,当ROTATE时间周期到达后,重复使用同一个文件前truncate文件内容
log_filename = 'postgresql-%a.log'
# 什么时候触发基于时间的rotate
log_rotation_age = 1d
# 当生成新的文件时,文件名已存在,则覆盖同名旧文件名
log_truncate_on_rotation = on
# 如果文件达到100MB,切换到下一个文件(如果文件名与当前已有文件名同名,则APPEND,而不会truncate这个文件)
# 所以以上配置,1天内文件大小可以超过100MB。
log_rotation_size = 100MB # 什么时候触发基于文件大小的rotate。
#设置日志记录内容,log_statement:none, ddl, mod, and all 默认是 none
# None表示不记录,ddl记录所有数据定义命令,比如CREATE,ALTER,和DROP语句,
# mod记录所有ddl语句,加上数据修改语句INSERT,UPDATE等
# all记录所有执行的语句,将此配置设置为all可跟踪整个数据库执行的SQL语句,但会对数据库性能产生较大影响,生产环境不建议配置此值
log_statement = mod
# 以上设置完成之后,可以记录到 update、drop 等,但是并不会记录 select 语句,加上 log_min_duration_statement = 0 才可以记录到select
log_min_duration_statement=0
完成以上设置后,7天后会有7个日志文件,分别为周一到周日,日志文件会不断的覆盖前一个星期
> log_truncate_on_rotation设置为on的情况下:
> log_rotation_age触发,切文件,如果下一个log文件名的文件已经存在,会先执行文件truncate清数据。
> log_rotation_size触发,切文件,如果下一个log文件名的文件已经存在,则append写,不会执行文件truncate清数据。
> 所以rotate时,新的log文件名至关重要。
> 如果要配置保留7天,每天写一个文件,其实也是在文件名上下功夫,例如配置为%aAud都是可以的。
博主只是写了自己用到的配置,详细的配置,请借鉴德哥的文章:
https://github.com/digoal/blog/blob/master/201907/20190720_02.md