Example #1
0
func emitLogRecord(lr *logRecord, sr *serveRecord, target *logplexc.Client,
	isAudit bool, exit exitFn) {
	// Buffer to format the complete log message in.
	msgFmtBuf := bytes.Buffer{}

	// Helps with formatting a series of nullable strings.
	catOptionalField := func(prefix string, maybePresent *string) {
		if maybePresent != nil {
			if prefix != "" {
				msgFmtBuf.WriteString(prefix)
				msgFmtBuf.WriteString(": ")
			}

			msgFmtBuf.WriteString(*maybePresent)
			msgFmtBuf.WriteByte('\n')
		}
	}

	if sr.Prefix != "" {
		msgFmtBuf.WriteString(sr.Prefix)
		msgFmtBuf.WriteString(" ")
	}

	if isAudit {
		// The audit endpoint may be multiplexed, so add the
		// identity to help tell log records apart.
		msgFmtBuf.WriteString("instance_type=shogun identity=" +
			sr.I + " ")
	}

	catOptionalField("", lr.ErrMessage)
	catOptionalField("Detail", lr.ErrDetail)
	catOptionalField("Hint", lr.ErrHint)
	catOptionalField("Query", lr.UserQuery)

	err := target.BufferMessage(134, time.Now(),
		"postgres",
		"postgres."+strconv.Itoa(int(lr.Pid)),
		msgFmtBuf.Bytes())
	if err != nil {
		exit(err)
	}
}