栏目头部广告

PostgreSQL日志轮滚配置教程

一、PostgreSQL日志滚动介绍

官网介绍:https://postgresqlco.nf/doc/zh/param/log_truncate_on_rotation/

当logging_collector被启用时,这个参数将导致PostgreSQL截断(覆盖而不是追加)任何已有的同名日志文件。不过,截断只在一个新文件由于基于时间的轮转被打开时发生,在服务器启动或基于尺寸的轮转时不会发生。如果被关闭,在所有情况下以前存在的文件将被追加。简单理解:PGSQL日志处理机制是通过logging_collector参数来控制日志文件是持续追加,还是定期循环覆盖的。针对循环覆盖的场景,是基于时间的方式,即多长时间开始循环覆盖。

二、PostgreSQL配置参数解读

配置文件名:postgresql.conf

2.1 开启日志记录功能

logging_collector =on

◆ 布尔值
◆ 该参数启用日志收集器,它是一个捕捉被发送到stderr的日志消息的后台进程,并且它会将这些消息重定向到日志文件中

2.2 日志滚动策略 

(1)log_directory

log_directory = 'pg_log'

◆ 字符串
◆ 配置日志目录,默认为pg_log即可。可以是绝对路径,也可是相对路径(相对于数据库文件所在的路径)

(2)log_filename

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

◆ 字符串
◆ 日志文件名及其扩展名,%Y、%m、%d、%H、%M和%S,分别表示年、月、日、小时、分和秒
◆ 没有指定时间信息,系统会自动在log_filename值的末尾加上文件创建时间戳作为文件名

(3)log_truncate_on_rotation

log_truncate_on_rotation = on

◆ 布尔值
◆ 系统在创建一个新的数据库运行日志文件时,如果发现存在一个同名的文件,当log_truncate_on_rotation的值是on时,系统覆盖这个同名文件
◆ 当log_truncate_on_rotation的值是off时,系统将重用这个同名文件,在它的末尾添加新的日志信息

◆ 要注意的是,只有在log_rotation_age非零时,系统才创建新的日志文件的情况下,才会覆盖同名的日志文件
◆ 因为数据库重新启动或者因为参数log_rotation_size起作用而创建新的日志文件,不会覆盖同名的日志文件,而是在同名的日志文件末尾添加新的日志信息

(4)log_rotation_age

log_rotation_age = 0
◆ 数字型 单位为分钟
◆ 日志轮询时间,即该参数决定一个个体日志文件的最长生命期。当时间到期后,一个新的日志文件将被创建
◆ 注意:该值为0时不是禁用该功能,而是禁用基于时间的新日志文件创建

(5)log_rotation_size

log_rotation_size = 10240

◆ 数字型 单位是KB
◆ 日志轮询大小,该参数决定一个个体日志文件的最大尺寸。当尺寸达到该值后,将创建一个新的日志文件
◆ 注意:该参数值为0时,表示禁用基于尺寸的新日志文件创建

三、案例演示

3.1 log_filename日志格式说明

默认是postgresql-%Y-%m-%d_%H%M%S.log。支持strftime格式。
格式符说明:
%a 星期的英文单词的缩写:如星期一, 则返回 Mon
%A 星期的英文单词的全拼:如星期一,返回 Monday
%b 月份的英文单词的缩写:如一月, 则返回 Jan
%B 月份的引文单词的缩写:如一月, 则返回 January
%c 返回datetime的字符串表示,如03/08/15 23:01:26
%d 返回的是当前时间是当前月的第几天
%f 微秒的表示: 范围: [0,999999]
%H 以24小时制表示当前小时
%I 以12小时制表示当前小时
%j 返回 当天是当年的第几天 范围[001,366]
%m 返回月份 范围[0,12]
%M 返回分钟数 范围 [0,59]
%P 返回是上午还是下午–AM or PM
%S 返回秒数 范围 [0,61]

3.2 配置案例演示

(1)要求:保留 7 天的日志,每天的一个日志文件被命令为postgresql-.Mon.log、postgresql-.Tue.log等等,并且自动用本周的日志覆盖上一周的日志。

log_filename = postgresql-.%a.log   # 日志命名
log_truncate_on_rotation = on       # 开启循环覆盖
log_rotation_age = 1440             # 每天一个日志文件
log_rotation_size = 0               # 禁用基于尺寸的新日志文件创建

(2)要求:要保留 24 小时的日志,每个小时一个日志文件,但是在日志文件尺寸超过 1GB 时轮转

log_filename = postgresql-.%H%M.log   # 日志命名
log_truncate_on_rotation = on         # 开启循环覆盖
log_rotation_age = 60                 # 每小时一个日志文件
log_rotation_size = 1000000           # 开启基于尺寸的日志轮转,即新建一个日志文件。这里1G约等于1000M,1000000KB

作者:UStarGao
链接:https://www.starcto.com/PostgreSQL/252.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`