Documentation ¶
Overview ¶
Package sdjournal provides a low-level Go interface to the systemd journal wrapped around the sd-journal C API.
All public read methods map closely to the sd-journal API functions. See the sd-journal.h documentation[1] for information about each function.
To write to the journal, see the pure-Go "journal" package
[1] http://www.freedesktop.org/software/systemd/man/sd-journal.html
Index ¶
- Constants
- Variables
- type Journal
- func (j *Journal) AddConjunction() error
- func (j *Journal) AddDisjunction() error
- func (j *Journal) AddMatch(match string) error
- func (j *Journal) Close() error
- func (j *Journal) FlushMatches()
- func (j *Journal) GetCursor() (string, error)
- func (j *Journal) GetData(field string) (string, error)
- func (j *Journal) GetDataBytes(field string) ([]byte, error)
- func (j *Journal) GetDataValue(field string) (string, error)
- func (j *Journal) GetDataValueBytes(field string) ([]byte, error)
- func (j *Journal) GetEntry() (*JournalEntry, error)
- func (j *Journal) GetMonotonicUsec() (uint64, error)
- func (j *Journal) GetRealtimeUsec() (uint64, error)
- func (j *Journal) GetUniqueValues(field string) ([]string, error)
- func (j *Journal) GetUsage() (uint64, error)
- func (j *Journal) Next() (uint64, error)
- func (j *Journal) NextSkip(skip uint64) (uint64, error)
- func (j *Journal) Previous() (uint64, error)
- func (j *Journal) PreviousSkip(skip uint64) (uint64, error)
- func (j *Journal) SeekCursor(cursor string) error
- func (j *Journal) SeekHead() error
- func (j *Journal) SeekRealtimeUsec(usec uint64) error
- func (j *Journal) SeekTail() error
- func (j *Journal) SetDataThreshold(threshold uint64) error
- func (j *Journal) TestCursor(cursor string) error
- func (j *Journal) Wait(timeout time.Duration) int
- type JournalEntry
- type JournalReader
- type JournalReaderConfig
- type Match
Constants ¶
const ( // User Journal Fields SD_JOURNAL_FIELD_MESSAGE = "MESSAGE" SD_JOURNAL_FIELD_MESSAGE_ID = "MESSAGE_ID" SD_JOURNAL_FIELD_PRIORITY = "PRIORITY" SD_JOURNAL_FIELD_CODE_FILE = "CODE_FILE" SD_JOURNAL_FIELD_CODE_LINE = "CODE_LINE" SD_JOURNAL_FIELD_CODE_FUNC = "CODE_FUNC" SD_JOURNAL_FIELD_ERRNO = "ERRNO" SD_JOURNAL_FIELD_SYSLOG_FACILITY = "SYSLOG_FACILITY" SD_JOURNAL_FIELD_SYSLOG_IDENTIFIER = "SYSLOG_IDENTIFIER" SD_JOURNAL_FIELD_SYSLOG_PID = "SYSLOG_PID" // Trusted Journal Fields SD_JOURNAL_FIELD_PID = "_PID" SD_JOURNAL_FIELD_UID = "_UID" SD_JOURNAL_FIELD_GID = "_GID" SD_JOURNAL_FIELD_COMM = "_COMM" SD_JOURNAL_FIELD_EXE = "_EXE" SD_JOURNAL_FIELD_CMDLINE = "_CMDLINE" SD_JOURNAL_FIELD_CAP_EFFECTIVE = "_CAP_EFFECTIVE" SD_JOURNAL_FIELD_AUDIT_SESSION = "_AUDIT_SESSION" SD_JOURNAL_FIELD_AUDIT_LOGINUID = "_AUDIT_LOGINUID" SD_JOURNAL_FIELD_SYSTEMD_CGROUP = "_SYSTEMD_CGROUP" SD_JOURNAL_FIELD_SYSTEMD_SESSION = "_SYSTEMD_SESSION" SD_JOURNAL_FIELD_SYSTEMD_UNIT = "_SYSTEMD_UNIT" SD_JOURNAL_FIELD_SYSTEMD_USER_UNIT = "_SYSTEMD_USER_UNIT" SD_JOURNAL_FIELD_SYSTEMD_OWNER_UID = "_SYSTEMD_OWNER_UID" SD_JOURNAL_FIELD_SYSTEMD_SLICE = "_SYSTEMD_SLICE" SD_JOURNAL_FIELD_SELINUX_CONTEXT = "_SELINUX_CONTEXT" SD_JOURNAL_FIELD_SOURCE_REALTIME_TIMESTAMP = "_SOURCE_REALTIME_TIMESTAMP" SD_JOURNAL_FIELD_BOOT_ID = "_BOOT_ID" SD_JOURNAL_FIELD_MACHINE_ID = "_MACHINE_ID" SD_JOURNAL_FIELD_HOSTNAME = "_HOSTNAME" SD_JOURNAL_FIELD_TRANSPORT = "_TRANSPORT" // Address Fields SD_JOURNAL_FIELD_CURSOR = "__CURSOR" SD_JOURNAL_FIELD_REALTIME_TIMESTAMP = "__REALTIME_TIMESTAMP" SD_JOURNAL_FIELD_MONOTONIC_TIMESTAMP = "__MONOTONIC_TIMESTAMP" )
Journal entry field strings which correspond to: http://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html
const ( SD_JOURNAL_NOP = int(C.SD_JOURNAL_NOP) SD_JOURNAL_APPEND = int(C.SD_JOURNAL_APPEND) SD_JOURNAL_INVALIDATE = int(C.SD_JOURNAL_INVALIDATE) )
Journal event constants
const ( // IndefiniteWait is a sentinel value that can be passed to // sdjournal.Wait() to signal an indefinite wait for new journal // events. It is implemented as the maximum value for a time.Duration: // https://github.com/golang/go/blob/e4dcf5c8c22d98ac9eac7b9b226596229624cb1d/src/time/time.go#L434 IndefiniteWait time.Duration = 1<<63 - 1 )
Variables ¶
var (
ErrExpired = errors.New("Timeout expired")
)
Functions ¶
This section is empty.
Types ¶
type Journal ¶
type Journal struct {
// contains filtered or unexported fields
}
Journal is a Go wrapper of an sd_journal structure.
func NewJournal ¶
NewJournal returns a new Journal instance pointing to the local journal
func NewJournalFromDir ¶
NewJournalFromDir returns a new Journal instance pointing to a journal residing in a given directory. The supplied path may be relative or absolute; if relative, it will be converted to an absolute path before being opened.
func (*Journal) AddConjunction ¶
AddConjunction inserts a logical AND in the match list.
func (*Journal) AddDisjunction ¶
AddDisjunction inserts a logical OR in the match list.
func (*Journal) FlushMatches ¶
func (j *Journal) FlushMatches()
FlushMatches flushes all matches, disjunctions and conjunctions.
func (*Journal) GetData ¶
GetData gets the data object associated with a specific field from the current journal entry.
func (*Journal) GetDataBytes ¶
GetDataBytes gets the data object associated with a specific field from the current journal entry.
func (*Journal) GetDataValue ¶
GetDataValue gets the data object associated with a specific field from the current journal entry, returning only the value of the object.
func (*Journal) GetDataValueBytes ¶
GetDataValueBytes gets the data object associated with a specific field from the current journal entry, returning only the value of the object.
func (*Journal) GetEntry ¶
func (j *Journal) GetEntry() (*JournalEntry, error)
GetEntry returns a full representation of a journal entry with all key-value pairs of data as well as address fields (cursor, realtime timestamp and monotonic timestamp)
func (*Journal) GetMonotonicUsec ¶
GetMonotonicUsec gets the monotonic timestamp of the current journal entry.
func (*Journal) GetRealtimeUsec ¶
GetRealtimeUsec gets the realtime (wallclock) timestamp of the current journal entry.
func (*Journal) GetUniqueValues ¶
GetUniqueValues returns all unique values for a given field.
func (*Journal) NextSkip ¶
NextSkip advances the read pointer by multiple entries at once, as specified by the skip parameter.
func (*Journal) PreviousSkip ¶
PreviousSkip sets back the read pointer by multiple entries at once, as specified by the skip parameter.
func (*Journal) SeekCursor ¶
SeekCursor seeks to a concrete journal cursor.
func (*Journal) SeekHead ¶
SeekHead seeks to the beginning of the journal, i.e. the oldest available entry.
func (*Journal) SeekRealtimeUsec ¶
SeekRealtimeUsec seeks to the entry with the specified realtime (wallclock) timestamp, i.e. CLOCK_REALTIME.
func (*Journal) SeekTail ¶
SeekTail may be used to seek to the end of the journal, i.e. the most recent available entry.
func (*Journal) SetDataThreshold ¶
SetDataThresold sets the data field size threshold for data returned by GetData. To retrieve the complete data fields this threshold should be turned off by setting it to 0, so that the library always returns the complete data objects.
func (*Journal) TestCursor ¶
TestCursor checks whether the current position in the journal matches the specified cursor
type JournalEntry ¶
type JournalEntry struct { Fields map[string]string Cursor string RealtimeTimestamp uint64 MonotonicTimestamp uint64 }
JournalEntry represents all fields of a journal entry plus address fields.
type JournalReader ¶
type JournalReader struct {
// contains filtered or unexported fields
}
JournalReader is an io.ReadCloser which provides a simple interface for iterating through the systemd journal. A JournalReader is not safe for concurrent use by multiple goroutines.
func NewJournalReader ¶
func NewJournalReader(config JournalReaderConfig) (*JournalReader, error)
NewJournalReader creates a new JournalReader with configuration options that are similar to the systemd journalctl tool's iteration and filtering features.
func (*JournalReader) Close ¶
func (r *JournalReader) Close() error
Close closes the JournalReader's handle to the journal.
func (*JournalReader) Follow ¶
Follow synchronously follows the JournalReader, writing each new journal entry to writer. The follow will continue until a single time.Time is received on the until channel.
func (*JournalReader) Read ¶
func (r *JournalReader) Read(b []byte) (int, error)
Read reads entries from the journal. Read follows the Reader interface so it must be able to read a specific amount of bytes. Journald on the other hand only allows us to read full entries of arbitrary size (without byte granularity). JournalReader is therefore internally buffering entries that don't fit in the read buffer. Callers should keep calling until 0 and/or an error is returned.
func (*JournalReader) Rewind ¶
func (r *JournalReader) Rewind() error
Rewind attempts to rewind the JournalReader to the first entry.
type JournalReaderConfig ¶
type JournalReaderConfig struct { // The Since, NumFromTail and Cursor options are mutually exclusive and // determine where the reading begins within the journal. The order in which // options are written is exactly the order of precedence. Since time.Duration // start relative to a Duration from now NumFromTail uint64 // start relative to the tail Cursor string // start relative to the cursor // Show only journal entries whose fields match the supplied values. If // the array is empty, entries will not be filtered. Matches []Match // If not empty, the journal instance will point to a journal residing // in this directory. The supplied path may be relative or absolute. Path string }
JournalReaderConfig represents options to drive the behavior of a JournalReader.