PostgreSQL 8.2.3 中文文档
后退快退章17. 服务器配置快进前进

17.7. 错误报告和日志

17.7.1. 在哪里记录日志

log_destination (string)

PostgreSQL 支持多种记录服务器日志的方法,包括 stderrsyslog 。在 Windows 里,还支持 eventlog 作为日志系统。把这个选项设置为一个逗号分隔的日志目标的列表。缺省是只记录到 stderr 。这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。

redirect_stderr (boolean)

这个选项允许把那些发送到 stderr 的消息捕获下来,然后把它们重定向到日志文件里。这个选项通常比记录到 syslog 更有用,因为有些消息类型不出现在 syslog 输出中(一个常见的例子是动态连接失败的消息)。这个值只能在服务器启动的时候设置。

log_directory (string)

在打开了 redirect_stderr 的时候,这个选项判断日志文件在哪个目录里创建。它可以声明成绝对路径,或者是与集群的数据目录相对的路径。这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。

log_filename (string)

在打开了 redirect_stderr 的时候,这个选项设置所创建的日志文件的文件名。这个数值将被当作 strftime 模式看待。因此可以用 % 逃逸声明随时间而变的文件名。如果没有出现 % 逃逸,PostgreSQL 将自动附加日志文件打开的时间戳。比如,如果 log_filename 设置为 server_log ,那么开始于 Sun Aug 29 19:02:33 2004 MST 的日志文件的名称将是 server_log.1093827753 。这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。

log_rotation_age (integer)

在打开了 redirect_stderr 的时候,这个选项设置一个独立日志文件的最大生存期。在数值指定的分钟过去之后,将创建一个新的日志文件。设置为零可以关闭以时间为基础的新日志文件的创建。这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。

log_rotation_size (integer)

在打开了 redirect_stderr 的时候,这个选项设置一个独立的日志文件的最大尺寸。在数值指定的千字节写入日志文件之后,将会创建一个新的日志文件。设置为零可以关闭以尺寸为基础的新日志文件的创建。这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。

log_truncate_on_rotation (boolean)

在打开了 redirect_stderr 的时候,这个选项将导致 PostgreSQL 覆盖而不是附加到任何同名的现有日志文件上。不过,覆盖只是发生在基于时间滚动而创建的新文件上,而不是在服务器启动的时候或者以尺寸为基础的滚动上。如果为 off ,将始终向已存在的文件结尾追加。比如,使用这个选项和类似 postgresql-%H.log 这样的 log_filename 设置将导致生成 24 个按小时生成的日志文件然后在这些文件上循环。这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。

例子:保留 7 天的日志,每天一个日志文件,叫做 server_log.Mon, server_log.Tue 等等,并且上周的日志会自动被这周的日志覆盖。把 log_filename 设置为 server_log.%a 、把 log_truncate_on_rotation 设置为 on 、把 log_rotation_age 设置为 1440

例子:保留 24 小时的日志,每小时一个日志,但是如果日志文件尺寸大于 1GB 也旋转日志。把 log_filename 设置为 server_log.%H%M 、把 log_truncate_on_rotation 设置为 on 、把 log_rotation_age to 60 、把 log_rotation_size 设置为 1000000 。在 log_filename 里包含 %M 允许任何尺寸驱动的旋转选取一个和开始的文件名同小时数但是名字不同的文件。

syslog_facility (string)

如果向 syslog 进行记录,那么这个选项判断要使用的 syslog "设施"。你可以从 LOCAL0(默认), LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7 中选择。又见你的系统的 syslog 守护进程文档。这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。

syslog_ident (string)

如果向 syslog 进行记录,这个选项决定用于在 syslog 日志中标识 PostgreSQL 的程序名。缺省是 postgres 。这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。

17.7.2. 什么时候记录日志

client_min_messages (string)

这个选项控制哪些信息发送到客户端。有效的数值是 DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, LOG, NOTICE, WARNING, ERROR, FATAL, PANIC 。每个级别包含所有它后面的级别,级别越靠后,发送的信息越少。缺省是 NOTICE 。需要注意的是这里的 LOGlog_min_messages 里的级别不同。

log_min_messages (string)

控制写到服务器日志里的信息的详细程度。有效值是 DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, PANIC 。每个级别都包含它后面的级别。越靠后的数值发往服务器日志的信息越少。缺省是 NOTICE 。需要注意的是这里的 LOGclient_min_messages 里的级别不同。只有超级用户可以修改这个设置。

log_error_verbosity (string)

控制记录的每条信息写到服务器日志里的详细程度。有效的值是 TERSE, DEFAULT, VERBOSE ,逐个向显示的信息里增加更多的字段。只有超级用户可以改变这个设置。

log_min_error_statement (string)

控制是否在服务器日志里输出那些导致错误条件的 SQL 语句。所有导致一个特定级别(或者更高级别)错误的 SQL 语句都要被记录。有效的值有 DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, FATAL, PANIC 。缺省是 ERROR ,表示所有导致错误、致命错误、恐慌的 SQL 语句都将被记录。设置为 PANIC 表示把这个特性关闭。只有超级用户可以改变这个设置。

log_min_duration_statement (integer)

如果某个语句的持续时间大于或者等于这个毫秒数,那么在日志行上记录该语句及其持续时间。设置为零将打印所有查询和他们的持续时间。设置为-1(缺省值)关闭这个功能。比如,如果你把它设置为 250ms ,那么所有运行时间等于或者超过 250ms 的 SQL 语句都会被记录。打开这个选项可以很方便地跟踪需要优化的查询。只有超级用户可以改变这个设置。

对于使用扩展查询协议的客户端,语法分析、邦定、执行每一步所花时间都分别记录。

【注意】当此选项与 log_statement 同时使用时,已经被 log_statement 记录的语句文本不会被重复记录。如果没有使用 syslog 的话,推荐使用 log_line_prefix 记录 PID 或会话 ID ,这样就可以使用它们将语句消息连接耗时消息。

silent_mode (boolean)

安静的运行服务器。如果设置了这个选项,服务器将自动在后台运行并且与控制终端脱开。服务器的标准输出和标准错误将重定向到 /dev/null ,因此,发送的任何信息都将丢失。除非打开了 syslog 日志或者 redirect_stderr ,否则我们不建议使用这个选项,因为它让我们很难看到错误信息。这个值只能在服务器启动的时候设置。

这里是这个设置里用到各种信息严重程度类型的一个列表:

DEBUG[1-5]

提供开发人员使用的信息。

INFO

提供用户隐含要求的信息,比如在 VACUUM VERBOSE 过程中的信息。

NOTICE

提供可能对用户有帮助的信息,比如,长标识符的截断,作为主键一部分创建的索引。

WARNING

提供给用户的警告,比如在事务块范围之外的 COMMIT

ERROR

报告导致当前命令退出的错误。

LOG

报告一些管理员感兴趣的信息,比如,检查点活跃性。

FATAL

报告导致当前会话终止的原因。

PANIC

报告导致所有会话退出的原因。

17.7.3. 记录什么

debug_print_parse (boolean)
debug_print_rewritten (boolean)
debug_print_plan (boolean)
debug_pretty_print (boolean)

这些选项打开各种调试输出。对于执行的每个查询,它们打印生成的分析树、查询重写或者执行规划。debug_pretty_print 把这些输出进行缩进,会生成易读但是长一些的输出格式。client_min_messageslog_min_messages 必须是 DEBUG1 或者更低才把输出实际发往客户端或者服务器日志。这些选项缺省都是关闭的。

log_connections (boolean)

在每次成功连接的时候都向服务器日志里打印一行详细信息。缺省时是关闭的,尽管它可能很有用。有些客户端程序,比如 psql ,在判断是否需要口令的时候试图连接两次,因此,重复的"connection receive"(收到连接请求)并不意味着一定是问题。这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。

log_disconnections (boolean)

这个选项类似 log_connections ,但是在会话结束的时候在服务器日志里输出一行。缺省是关闭的。这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。

log_duration (boolean)

记录每个已完成语句的持续时间。默认值是 off 。只有超级用户可以改变这个设置。

对于使用扩展查询协议的客户端,语法分析、邦定、执行每一步所花时间都分别记录。

【注意】设置为 0 时该选项与 log_min_duration_statement 的不同之处在于 log_min_duration_statement 强制记录查询文本。因此,如果 log_durationon 并且 log_min_duration_statement 大于零将记录所有持续时间,但是仅记录那些超过阈值的语句。这可以用于在高负载情况下搜集统计信息。

log_line_prefix (string)

这是一个 printf 风格的字符串,在日志的每行开头输出。缺省是空字符串。下面列出每个可识别的逃逸,任何其它看起来像逃逸的都会被忽略。其它字符都直接拷贝到日志行中。有些逃逸只被会话进程识别,不能应用于后端进程,比如主服务器进程。Syslog 生成自己的时间戳和进程 ID 信息,因此,如果你使用了 syslog ,可能没必要使用那些逃逸。这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。

逃逸效果仅用于会话
%u用户名
%d数据库名
%r远程主机名或者 IP 地址以及远端端口
%h远程主机名或者 IP 地址
%p进程 ID
%t时间戳(没有毫秒,Windows 上没有时区)
%m带毫秒的时间戳
%i命令标签。这是生成日志行的命令。
%c会话 ID 。每个会话的唯一标识符。它是两个 4 字节的十六进制数字(没有前导零),用句点分开。数字是会话开始时间和进程 ID ,因此也可以用做一种打印这些项目的节约空间的方法。
%l每个进程的日志行编号,从 1 开始。
%s会话开始的时间戳
%x事务 ID
%q不生成任何输出,但是告诉非会话进程在字符串的这个位置停止。被会话进程忽略。
%%% 文本

log_statement (string)

控制记录哪些 SQL 语句。有效的值是 none, ddl, mod, allddl 记录所有数据定义命令,比如 CREATE, ALTER, DROP 语句。mod 记录所有 ddl 语句,加上数据修改语句 INSERT, UPDATE, DELETE, TRUNCATE, COPY FROM 。如果所包含的命令类型吻合,那么 PREPARE, EXECUTE, EXPLAIN ANALYZE 语句也同样被记录。对于使用扩展查询协议的客户端,记录发生在接受到扩展信息并包含邦定参数(内置单引号要双写)的时候。

缺省是 none 。只有超级用户可以改变这个设置。

【注意】即使设置了 log_statement = all ,包含简单语法错误的语句也不会被记录。因为仅在完成基本的语法分析并确定了语句类型之后才记录日志。在使用扩展查询协议的情况下,在执行阶段之前(语法分析或规划阶段)同样不会记录。将 log_min_error_statement 设为 ERROR 或更低才能记录这些语句。

log_hostname (boolean)

缺省时,连接日志只记录所连接主机的 IP 地址。打开这个选项导致同时记录主机名。请注意,这样有可能带来一些不可忽略的性能损失(取决于你的名字解析的设置)。这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。


后退首页前进
查询规划上一级运行时统计