This is a module for accessing systemd journal.
You can find the documentation page here
Require the module and create a new instance:
const Journalctl = require('@bryopsida/journalctl')
const journalctl = new Journalctl([opts])
The optional object opts
can have the following properties:
-
identifier
: Just output logs of the given syslog identifier (cf. man journalctl, option '-t') -
unit
: Just output logs originated from the given unit file (cf. man journalctl, option '-u') -
filter
: An array of matches to filter by (cf. man journalctl, matches) -
all
: Show all fields in full, even if they include unprintable characters or are very long. (cf. man journalctl, option '-a') -
lines
: Show the most recent journal events and limit the number of events shown (cf. man journalctl, option '-n') -
since
: Start showing entries on or newer than the specified date (cf. man journalctl, option '-S')
journalctl.on('json-message', event => {})
Is fired on every decoded json message.
journalctl.on('raw-message', buffer => {})
Is fired on every data event from the journalctl sub process.
journalctl.on('error', err => {})
Is fired whenever the journalctl sub process emits an error or the class encounters an error condition.
journalctl.on('close', () => {})
Is fired whenever the journalctl sub process exits with status code 0.
journalctl.stop([callback])
journalctl.getStdout().pipe(process.stdout)
Returns the stdout stream from the journalctl sub process.
journalctl.getStderr().pipe(process.stderr)
Returns the stderr stream from the journalctl sub process.
const Journalctl = require('@bryopsida/journalctl')
const logger = new Journalctl().on('json-message', e => {
console.log(e)
})
process.on('SIGINT', () => {
logger.stop(() => {
process.exit()
})
})
const Journalctl = require('@bryopsida/journalctl')
const j = new Journalctl({
disableJSONMessages: true,
emitRawMessages: false
})
j.getStdout().pipe(process.stdout)
j.getStderr().pipe(process.stderr)
process.on('SIGINT', () => {
j.stop(() => {
process.exit()
})
})
const Journalctl = require('@bryopsida/journalctl')
const j = new Journalctl({
disableJSONMessages: true,
emitRawMessages: true
}).on('raw-message', buffer => {
process.stdout.write(buffer)
})
process.on('SIGINT', () => {
j.stop(() => {
process.exit()
})
})
const Journalctl = require('@bryopsida/journalctl')
const j = new Journalctl({
commandPrefix: ['vagrant', 'ssh', '-c'],
quoteArgs: true,
spawnOptions: {
shell: true
}
}).on('json-message', e => {
console.log(e)
})
process.on('SIGINT', () => {
j.stop(() => {
process.exit()
})
})
If you need a test environment with journald running, and you have vagrant installed, you can spin one up with vagrant up
and remove it with vagrant destroy
once you are finished.
You can access the environment by using vagrant ssh
. This project is available at /vagrant
inside the vagrant box.