一直好奇在PG中, 当输出错误日志时, 如何能够附带错误信息所在的源代码文件名以及发生错误的代码行数.
postgres.conf中, log信息冗余级别为"default(默认)", terse: 表示更加简单的日志信息, verbose: 表示更加冗余的日志信息(即: 附带"文件名和行数)
1#log_error_verbosity = default # terse, default, or verbose messages
修改为下面的"verbose"即可.
1log_error_verbosity = verbose # terse, default, or verbose messages
修改后, 重启实例后生效, 结果如下, 可以看到日志信息附带了"文件名"和"行数"信息.
2020-03-02 09:34:41.800 CST [9019] LOG: 00000: listening on IPv6 address "::1", port 7433
2020-03-02 09:34:41.800 CST [9019] LOCATION: StreamServerPort, pqcomm.c:593
2020-03-02 09:34:41.800 CST [9019] LOG: 00000: listening on IPv4 address "127.0.0.1", port 7433
2020-03-02 09:34:41.800 CST [9019] LOCATION: StreamServerPort, pqcomm.c:593
2020-03-02 09:34:41.801 CST [9019] LOG: 00000: l唐山百度优化istening on Unix socket "/tmp/.s.PGSQL.7433"
2020-03-02 09:34:41.801 CST [9019] LOCATION: StreamServerPort, pqcomm.c:587
2020-03-02 09:34:41.814 CST [9020] LOG: 00000: database system was shut down at 2020-03-02 09:34:24 CST
2020-03-02 09:34:41.814 CST [9020] LOCATION: StartupXLOG, xlog.c:6291
2020-03-02 09:34:41.819 CST [9019] LOG: 00000: database system is ready to accept connections
2020-03-02 09:34:41.819 CST [9019] LOCATION: reaper, postmaster.c:2938
备注: 以上verbose方法应该只能在debug模式下生效, 因为release下根本就没有文件名和行数相关的信息.
补充:PostgreSQL数据库之运行日志
PostgreSQL有三种日志:
1、pg_wal(WAL 日志,即重做日志) 内容一般不具有可读性强制开启
2、pg_log(数据库运行日志) 内容可读 默认关闭的,需要设置参数启动
3、pg_clog(事务提交日志,记录的是事务的元数据) 内容一般不具有可读性 强制开启
PostgreSQL运行日志可以实现日志输出记录,默认是没有启动记录。这个日志一般是记录服务器与DB的状态,比如各种Error信息,定位慢查询SQL,数据库的启动关闭信息,发生checkpoint过于频繁等的告警信息,诸如此类。
PostgreSQL常用日志参数
项目默认值设定值说明
logging_collectoroffon日志收集功能是否启动
log_destinationstderrcsvlog日志收集存储方式
log_directorylogpg_log日志收集存储路径
log_filenamepostgresql-%Y-%m-%d.logpostgresql-%Y-%m-%d_%H%M%S.log日志文件命名格式
log_timezoneRPCRPC日志时区
log_rotation_age14407d单个日志文件生存周期,默认1天
log_rotation_size10240100MB单个日志文件大小
log_truncate_on_retationoffofflog_rotation_age触发切换下一个日志,存在则附加,否则将覆盖