Evan Carroll Asked: 2021-10-29 09:11:00 +0800 CST2021-10-29 09:11:00 +0800 CST 2021-10-29 09:11:00 +0800 CST 是否有从 PostgreSQL 的 C 函数中打印/调试的方法? 772 当您在 C 中扩展 PostgreSQL 时,如何自省/调试/转储变量?除了将自定义结果集返回给客户端之外,还有其他方法吗?printf我可以在服务器或客户端的日志中收到类似的东西? postgresql postgresql-extensions 2 个回答 Voted jjanes 2021-10-29T14:42:03+08:002021-10-29T14:42:03+08:00 使用 elog 比使用 printf 可能更好。这样您就可以免费获得日志系统的所有功能。 elog(NOTICE, "Hello World! %d", myInt); 除了 NOTICE,您还可以使用 INFO、LOG、WARN、DEBUG1 等。 Best Answer Evan Carroll 2021-10-29T09:11:00+08:002021-10-29T09:11:00+08:00 在 PostgreSQL 的文档页面中记录了一些方法,用于错误日志报告,有较旧的方法elog和较新的方法ereport elog(level, "format string", ...); ereport(level, errmsg_internal("format string", ...)); level可以设置为ERROR,和WARNINGwhereNOTICE中止ERROR执行。 对他们的指导是 因此,elog应该只用于内部错误和低级调试日志记录。任何普通用户可能感兴趣的消息都应该通过ereport。elog尽管如此,仍然广泛使用的系统中有足够的内部“不可能发生”错误检查;由于其符号简单,它是那些消息的首选。 有更多关于 ereport 的“辅助例程”的信息,它允许您指定errcode, errmsg(和复数), errmsg_internal, errdetail(和复数), errdetail_internal, errdetail_log(和复数), errhint(和复数), errcontext, errposition, errtable, errtablecol, errtableconstraint, errdatatype, errdomainconstraint, errcode_for_file_access, errcode_for_socket_access, errhidestmt,和errhidecontext。 您也可以简单地使用 printf("Hello World! %d", myInt); 你会在你的服务器日志中看到结果, /var/log/postgresql/postgresql-13-main.log
使用 elog 比使用 printf 可能更好。这样您就可以免费获得日志系统的所有功能。
除了 NOTICE,您还可以使用 INFO、LOG、WARN、DEBUG1 等。
在 PostgreSQL 的文档页面中记录了一些方法,用于错误日志报告,有较旧的方法
elog
和较新的方法ereport
elog(level, "format string", ...);
ereport(level, errmsg_internal("format string", ...));
level
可以设置为ERROR
,和WARNING
whereNOTICE
中止ERROR
执行。对他们的指导是
有更多关于 ereport 的“辅助例程”的信息,它允许您指定
errcode
,errmsg
(和复数),errmsg_internal
,errdetail
(和复数),errdetail_internal
,errdetail_log
(和复数),errhint
(和复数),errcontext
,errposition
,errtable
,errtablecol
,errtableconstraint
,errdatatype
,errdomainconstraint
,errcode_for_file_access
,errcode_for_socket_access
,errhidestmt
,和errhidecontext
。您也可以简单地使用
你会在你的服务器日志中看到结果,