Dependencies

Obviously you will need to have
systemd installed on your
system (specifically libsystemd or the older libsystemd-journal) in order to
use the gem. Currently we support systemd 208 or higher.

Usage

require'systemd/journal'

Print all messages as they occur:

j=Systemd::Journal.newj.seek(:tail)j.move_previous# watch() does not return
j.watchdo|entry|putsentry.messageend

Filter events and iterate:

j=Systemd::Journal.new# only display entries from SSHD with priority 6.
j.filter(priority:6,_exe:'/usr/bin/sshd')j.eachdo|entry|putsentry.messageend

Moving around the journal:

j=Systemd::Journal.newj.seek(:head)# move to the start of journal
j.move(10)# move forward by 10 entries
c=j.cursor# get a reference to this entry
j.move(-5)# move back 5 entries
j.seek(c)# move to the saved cursor
j.cursor?(c)# verify that we're at the correct entry
j.seek(:tail)# move past the end of the journal
j.move_previous# move to last entry in journal
j.move_next# move forward (fails since we're at the end)
j.current_entry# get the entry we're currently positioned at
# seek the entry that occured closest to this time
j.seek(Time.parse('2013-10-31T12:00:00+04:00:00'))

Waiting for things to happen:

j = Systemd::Journal.new
j.seek(:tail)
j.move_previous
# wait up to one second for something to happen
if j.wait(1_000_000)
puts 'something changed!'
# same as above, but can be interrupted with Control+C.
if j.wait(1_000_000, select: true)
puts 'something changed!'

I get 'Cannot assign requested address' when trying to read an entry!

The solution is to always call one of move, move_next, move_previous and
friends before reading after issuing one of the above calls. For most functions,
call move_next. For seek(:tail), call move_previous.

Issues?

This gem has been tested primarily on MRI and Arch Linux running systemd version
208 and up. Please let me know if you have issues with other versions or
distributions.

The gem will run under JRuby, although some features which rely on native file
descriptor support will not work.

If you run into problems or have questions, please open an
Issue or Pull Request.