HGDB 数据库日志配置

67 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

日志设置

--开启日志收集,并设置保存路径(数据目录的相对路径,或直接使用绝对路径/opt/HighGo6.0.2-cluster/data/hgdb_log)
logging_collector = on
log_directory = 'hgdb_log'

--保留一个月日志,进行循环覆盖。
log_filename = 'highgodb_%d.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0

保存设置

log_filename = 'highgodb-%I.log'			#最多保存12小时的日志,每小时一个文件
log_filename = 'highgodb-%H.log'			#最多保存24小时的日志,每小时一个文件
log_filename = 'highgodb-%a.log'			#最多保存一周的日志,每天一个文件
log_filename = 'highgodb-%d.log'			#最多保存一个月的日志,每天一个文件
log_filename = 'highgodb-%j.log'			#最多保存一年的日志,每天一个文件

%a:星期的英文单词的缩写:如星期一, 则返回 Mon
%A:星期的英文单词的全拼:如星期一,返回 Monday
%b:月份的英文单词的缩写:如一月, 则返回 Jan
%B:月份的引文单词的缩写:如一月, 则返回 January
%c:返回datetime的字符串表示,如03/08/15 23:01:26
%d:返回的是当前时间是当前月的第几天
%f:微秒的表示: 范围: [0,999999]
%H:以24小时制表示当前小时
%I:以12小时制表示当前小时
%j:返回 当天是当年的第几天 范围[001,366]
%m:返回月份 范围[0,12]
%M:返回分钟数 范围 [0,59]
%P:返回是上午还是下午–AM or PM
%S:返回秒数 范围 [0,61]。。。
%U:返回当周是当年的第几周 以周日为第一天
%W:返回当周是当年的第几周 以周一为第一天
%w:当天在当周的天数,范围为[0, 6],6表示星期天
%x:日期的字符串表示 :03/08/15
%X:时间的字符串表示 :23:22:08
%y:两个数字表示的年份 15
%Y:四个数字表示的年份 2015
%z:与utc时间的间隔 (如果是本地时间,返回空字符串)
%Z:时区名称(如果是本地时间,返回空字符串)

其他配置

--记录数据库中执行时间超过5s的sql
log_min_duration_statement = 5s    
log_checkpoints = on
log_connections = on      
log_line_prefix = '%m [%p] %q %u %d %a %r %e '       

%a:应用名
%u:用户名
%d:数据库名
%r:远程主机名或 IP 地址,以及远程端口
%h:远程主机名或 IP 地址
%b:后端类型
%p:进程 ID
%t:无毫秒的时间戳
%m:带毫秒的时间戳
%n:带毫秒的时间戳(作为 Unix 时代)
%i:命令标签:会话当前命令的类型
%e:SQLSTATE 错误代码
%c:会话 ID:见下文
%l:对每个会话或进程的日志行号,从 1 开始
%s:进程开始的时间戳
%v:虚拟事务 ID (backendID/localXID)
%x:事务 ID (如果未分配则为 0)
%q:不产生输出,但是告诉非会话进程在字符串的这一点停止;会话进程忽略
%%:纯文字%

CSV 日志导入数据库表中

CREATE TABLE hgdb_log
(
log_time timestamp(3) with time zone,
user_name text,
database_name text,
process_id integer,
connection_from text,
session_id text,
session_line_num bigint,
command_tag text,
session_start_time timestamp with time zone,
virtual_transaction_id text,
transaction_id bigint,
error_severity text,
sql_state_code text,
message text,
detail text,
hint text,
internal_query text,
internal_query_pos integer,
context text,
query text,
query_pos integer,
location text,
application_name text,
PRIMARY KEY (session_id, session_line_num)
);
COMMENT ON COLUMN hgdb_log.log_time IS '时间戳';
COMMENT ON COLUMN hgdb_log.user_name IS '用户名';
COMMENT ON COLUMN hgdb_log.database_name IS '数据库名';
COMMENT ON COLUMN hgdb_log.process_id IS '进程ID';
COMMENT ON COLUMN hgdb_log.connection_from IS '客户端主机端口号';
COMMENT ON COLUMN hgdb_log.session_id IS '会话ID';
COMMENT ON COLUMN hgdb_log.session_line_num IS '每个会话的行号';
COMMENT ON COLUMN hgdb_log.command_tag IS '命令标签';
COMMENT ON COLUMN hgdb_log.session_start_time IS '会话开始时间';
COMMENT ON COLUMN hgdb_log.virtual_transaction_id IS '虚拟事务ID';
COMMENT ON COLUMN hgdb_log.transaction_id IS '普通事务ID';
COMMENT ON COLUMN hgdb_log.error_severity IS '错误严重性';
COMMENT ON COLUMN hgdb_log.sql_state_code IS 'SQLSTATE代码';
COMMENT ON COLUMN hgdb_log.message IS '错误消息';
COMMENT ON COLUMN hgdb_log.detail IS '错误消息详情';
COMMENT ON COLUMN hgdb_log.hint IS '提示';
COMMENT ON COLUMN hgdb_log.internal_query IS '导致错误的内部查询';
COMMENT ON COLUMN hgdb_log.internal_query_pos IS '错误位置所在的字符计数';
COMMENT ON COLUMN hgdb_log.context IS '错误上下文';
COMMENT ON COLUMN hgdb_log.query IS '导致错误的用户查询';
COMMENT ON COLUMN hgdb_log.query_pos IS '错误位置所在的字符计数';
COMMENT ON COLUMN hgdb_log.location IS '错误位置所在的字符计数';
COMMENT ON COLUMN hgdb_log.application_name IS '应用名';


COPY hgdb_log FROM '/opt/HighGo4.5.7-see/data/hgdb_log/highgodb_21.csv' WITH csv;