怎么在PostgreSQL中打印日志信息的源文件(postgresql,开发技术)

时间:2024-05-02 01:09:36 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

postgres.conf中, log信息冗余级别为"default(默认)", terse: 表示更加简单的日志信息, verbose: 表示更加冗余的日志信息(即: 附带"文件名和行数)

#log_error_verbosity=default#terse,default,orverbosemessages

修改为下面的"verbose"即可.

log_error_verbosity=verbose#terse,default,orverbosemessages

修改后, 重启实例后生效, 结果如下, 可以看到日志信息附带了"文件名"和"行数"信息.

2020-03-0209:34:41.800CST[9019]LOG:00000:listeningonIPv6address"::1",port74332020-03-0209:34:41.800CST[9019]LOCATION:StreamServerPort,pqcomm.c:5932020-03-0209:34:41.800CST[9019]LOG:00000:listeningonIPv4address"127.0.0.1",port74332020-03-0209:34:41.800CST[9019]LOCATION:StreamServerPort,pqcomm.c:5932020-03-0209:34:41.801CST[9019]LOG:00000:listeningonUnixsocket"/tmp/.s.PGSQL.7433"2020-03-0209:34:41.801CST[9019]LOCATION:StreamServerPort,pqcomm.c:5872020-03-0209:34:41.814CST[9020]LOG:00000:databasesystemwasshutdownat2020-03-0209:34:24CST2020-03-0209:34:41.814CST[9020]LOCATION:StartupXLOG,xlog.c:62912020-03-0209:34:41.819CST[9019]LOG:00000:databasesystemisreadytoacceptconnections2020-03-0209:34:41.819CST[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触发切换下一个日志,存在则附加,否则将覆盖log_min_messageswarningwarning日志输出级别log_min_duration_statement-13000-1表示不可用,0将记录所有SQL语句和它们的耗时,>0只记录那些耗时超过(或等于)这个值(ms)的SQL语句。log_checkpointsoffon记录Checkpoint信息log_connectionsoffon是否记录连接日志log_disconnectionsoffon是否记录连接断开日志log_durationoffoff记录每条SQL语句执行完成消耗的时间log_line_prefix%m[%p]%e: %t [%p]: [%l-1] user = %u,db = %d,remote = %r app = %a日志输出格式;log_lock_waitsoffon控制当一个会话等待时间超过deadlock_timeout而被锁时是否产生一个日志信息。可判断是否存在锁等待问题log_statementnoneddl控制记录哪些SQL语句。可选值:none=>不记录、ddl=>Create table之类的、mod=>DML语句、all=>记录所有

log_line_prefix参数说明:

%a=applicationname应用名称%u=username用户名称%d=databasename数据库名称%r=remotehostandport远程主机与端口%h=remotehost远程主机%p=processID进程号%t=timestampwithoutmilliseconds时间戳格式%m=timestampwithmillisecond时间戳格式%n=timestampwithmilliseconds(asaUnixepoch)时间戳格式%i=commandtag命令标签%e=SQLstateSQL语句状态

日志设置方式

启动pg_log配置与日志参数

ALTERSYSTEMSETlog_destination='csvlog';ALTERSYSTEMSETlogging_collector=on;ALTERSYSTEMSETlog_directory='pg_log';ALTERSYSTEMSETlog_filename='postgresql-%Y-%m-%d_%H%M%S.log';ALTERSYSTEMSETlog_rotation_age='7d';ALTERSYSTEMSETlog_rotation_size='100MB';ALTERSYSTEMSETlog_min_messages=warning;

记录执行慢的SQL语句

ALTERSYSTEMSETlog_min_duration_statement=3000;ALTERSYSTEMSETlog_checkpoints=on;ALTERSYSTEMSETlog_connections=on;ALTERSYSTEMSETlog_disconnections=on;ALTERSYSTEMSETlog_duration=off;ALTERSYSTEMSETlog_line_prefix='%e:%t[%p]:[%l-1]user=%u,db=%d,remote=%rapp=%a';

监控数据库中长时间的锁

ALTERSYSTEMSETlog_lock_waits=on;

记录DDL操作

ALTERSYSTEMSETlog_statement='ddl';

参数查询

selectname,setting,short_descfrompg_settingswherenamelike'log_%';

重启服务&Reload参数

//重启服务pg_ctlrestart-mfast-D/pgdata/11.2/data//Reload参数selectpg_reload_conf();

CSV日志导入到数据库分析

:# 创建数据表

CREATETABLEpostgres_log(log_timetimestamp(3)withtimezone,user_nametext,database_nametext,process_idinteger,connection_fromtext,session_idtext,session_line_numbigint,command_tagtext,session_start_timetimestampwithtimezone,virtual_transaction_idtext,transaction_idbigint,error_severitytext,sql_state_codetext,messagetext,detailtext,hinttext,internal_querytext,internal_query_posinteger,contexttext,querytext,query_posinteger,locationtext,application_nametext,PRIMARYKEY(session_id,session_line_num));

:# CSV日志加载

\copypostgres_logfrom‘<CSV日志路径>'withcsv;

怎么在PostgreSQL中打印日志信息的源文件

:# 数据检索测试

//csv日志区间范围selectmin(log_time),max(log_time)frompostgres_log;min|max----------------------------+---------------------------2019-12-1123:18:17.334+08|2019-12-1123:30:49.04+08(1行记录)//模糊检索字段信息selectlog_time,database_name,user_name,application_name,messagefrompostgres_logwheremessagelike'%duration%';log_time|database_name|user_name|application_name|message----------------------------+---------------+-----------+------------------+-----------------------2019-12-1123:18:33.559+08|pgbench|pgbench|pgbench|duration:36.286ms2019-12-1123:18:33.573+08|pgbench|pgbench|pgbench|duration:13.944ms2019-12-1123:18:33.581+08|pgbench|pgbench|pgbench|duration:7.953ms2019-12-1123:18:34.561+08|pgbench|pgbench|pgbench|duration:976.103ms

SQL统计信息

pg_stat_statements统计了SQL的很多信息,方便我们分析SQL的性能。

:# 参数配置

altersystemsetshared_preload_libraries=pg_stat_statements;

:# 重启服务&Reload参数

pg_ctlrestart-mfast-D/pgdata/11.2/data

:# 创建扩展表

CREATEEXTENSIONpg_stat_statements;

:# 查询TOP10

SELECTquery,calls,total_time,(total_time/calls)asaverage,rows,100.0*shared_blks_hit/nullif(shared_blks_hit+shared_blks_read,0)AShit_percentFROMpg_stat_statementsORDERBYaverageDESCLIMIT10;

※ 统计结果一直都在,重启也不会清零。通过如下命令可以手工清零。

selectpg_stat_statements_reset();

日志保留周期

通常我们会对日志进行定期保留以保证不会撑爆磁盘容量,此时需要考虑日志保留周期。

核心参数:

项目默认值设定值说明log_truncate_on_retationoffofflog_rotation_age触发切换下一个日志,存在则附加,否则将覆盖log_rotation_age14407d单个日志文件生存周期,默认1天log_rotation_size10240100MB单个日志文件大小

按照每分钟创建文件,保留1小时:

log_destination='csvlog'logging_collector=onlog_directory='log'log_filename='postgresql-%M.log'log_truncate_on_rotation=onlog_rotation_age=1minlog_rotation_size=100MB

每小时一个文件,保留一天:

log_destination='csvlog'logging_collector=onlog_directory='log'log_filename='postgresql-%H.log'log_truncate_on_rotation=onlog_rotation_age=1hourlog_rotation_size=100MB

每天一个文件,保留一个月:

log_destination='csvlog'logging_collector=onlog_directory='log'log_filename='postgresql-%d.log'log_truncate_on_rotation=onlog_rotation_age=1daylog_rotation_size=100MB

每个月一个文件,保留一年:

log_destination='csvlog'logging_collector=onlog_directory='log'log_filename='postgresql-%m.log'log_truncate_on_rotation=onlog_rotation_age=1monthlog_rotation_size=100MB

每天一个文件,保留一年:

log_destination='csvlog'logging_collector=onlog_directory='log'log_filename='postgresql-%m-%d.log'log_truncate_on_rotation=onlog_rotation_age=1daylog_rotation_size=100MB
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:怎么在PostgreSQL中打印日志信息的源文件的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:怎么在python中实现一个四舍五入功能下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18