是否有任何 GUC 或命令可以在 HAWQ 日志中获取调试消息?现在,我只能收到 ERROR 或 FATAL 消息,但无法收到任何 DEBUG 消息。如何在日志文件中打印这些调试消息?
4 回答
您可以在 hawq 主数据目录的 postgres.conf 中设置 log_min_messages 级别。日志级别可以是以下值,按细节递减的顺序排列:#debug5 #debug4 #debug3 #debug2 #debug1 #info #notice #warning #error #log #fatal #panic
apache hawq 的不同组件支持不同级别的调试消息。
总体支持水平如下。详情可参考https://github.com/apache/incubator-hawq/blob/master/src/include/utils/elog.h。
/* Error level codes */
Level Value
------------------
DEBUG5 10
DEBUG4 11
DEBUG3 12
DEBUG2 13
DEBUG1 14
LOG 15
COMMERROR 16
INFO 17
NOTICE 18
WARNING 19
ERROR 20
FATAL 21
PANIC 22
要获得您想要的 DEBUG 消息,您需要检查您关心的组件有关受支持的调试级别。然后在运行查询之前,使用以下设置获取调试信息:
- GUC 的持久级别(“hawq config -c log_min_messages -v DEBUG_LEVEL”,然后是“hawq restart cluster -a”)
- 或使用会话级调试(“set log_min_messages = DEBUG_LEVEL”)
如果最高调试级别也找不到足够的日志信息,可以尝试自己在apache hawq源代码中添加。
你说的DEBUG可能有两个意思,一个是hawq代码中的DEBUG日志级别,由ztao1987回答,另一个是你用gdb/lldb调试的时候,你的print函数的输出在哪里。答案也在主/段日志中。stdout 已经被 HAWQ 重定向到 log 文件,例如,当你想在 lldb 中打印一个 tupletableslot 时,只需键入“expr print_slot(yourslot)”,然后 tail -f your.log,就会在屏幕上打印槽信息.
如果您更改 postgres.conf,它需要重新启动集群。但是,如果您只想在此会话中记录调试信息,则可以在 PSQL 会话中设置 GUC log_min_messages。