Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/carvilsi/node-systemd-journal
Interact with linux systemd journal, adding entries and retrieving logs from NodeJS.
https://github.com/carvilsi/node-systemd-journal
journal journalctl linux logger nodejs npm systemd
Last synced: 27 days ago
JSON representation
Interact with linux systemd journal, adding entries and retrieving logs from NodeJS.
- Host: GitHub
- URL: https://github.com/carvilsi/node-systemd-journal
- Owner: carvilsi
- License: mit
- Created: 2024-03-22T16:26:40.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2024-10-18T08:51:42.000Z (2 months ago)
- Last Synced: 2024-10-29T02:18:39.634Z (about 2 months ago)
- Topics: journal, journalctl, linux, logger, nodejs, npm, systemd
- Language: JavaScript
- Homepage:
- Size: 115 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# node-systemd-journal
Interact with linux systemd journal, adding entries and retrieving logs from NodeJS.
**Only works on Linux**
## Usage
`$ npm install --save sysdlogger`
The in your code:
```javascript
import { SysDLogger } from 'sysdlogger';// instatiate with a tag
const syslogger = new SysDLogger({ tag: 'FOOBAR' });(async() => {
// writes with the provided tag
await syslogger.write('This is a foobar entry for journal');
// reads from journal by tag
const res = await syslogger.read();
console.log(res);
})();
```
You can check the added entry to journal like:`$ journalctl -t FOOBAR`
**Options**
This could be provided when instantiate or override when calling *write* or *read*.```javascript
const options = {
// string; the choosen tag, if not provided the default will be 'SysDLogger'
tag: 'SysDLogger',
// boolean; true will retrieve a JSON object with the log contenc
json: false,
// number of lines to retrieve from journal
lines: 0,
// if true will retrieve first latest entries
reverse: false,
// string; the choosen level or priority for logging, default: notice
level: undefined,
}
```With options for writing and reading you can do things like:
```javascript
import { SysDLogger } from 'sysdlogger';
import assert from 'node:assert';(async() => {
const myTag = 'NODE_SYSTEMD_JOURNAL';
const message = 'an ugly pigeon and a fluffy squirrel';
await syslogger.write(message, { tag: myTag });
const slogJSON = await syslogger.read({
tag: myTag,
json: true,
reverse: true,
lines: 1,
level: 'warn',
});
assert(slogJSON[0].SYSLOG_IDENTIFIER === myTag);
assert(slogJSON[0].MESSAGE === message);
assert(slogJSON[0].PRIORITY === 4);
assert(typeof slogJSON === 'object');
})();
```
The properties of the JSON object from journal are:```javascript
[
'_TRANSPORT',
'_SYSTEMD_CGROUP',
'_UID',
'_SYSTEMD_USER_SLICE',
'PRIORITY',
'_AUDIT_LOGINUID',
'SYSLOG_IDENTIFIER',
'__MONOTONIC_TIMESTAMP',
'_SYSTEMD_SLICE',
'_SYSTEMD_UNIT',
'SYSLOG_FACILITY',
'_CAP_EFFECTIVE',
'_SOURCE_REALTIME_TIMESTAMP',
'_RUNTIME_SCOPE',
'_MACHINE_ID',
'__SEQNUM_ID',
'_SYSTEMD_INVOCATION_ID',
'_HOSTNAME',
'__CURSOR',
'_GID',
'_SYSTEMD_OWNER_UID',
'__REALTIME_TIMESTAMP',
'_BOOT_ID',
'MESSAGE',
'SYSLOG_TIMESTAMP',
'_AUDIT_SESSION',
'_PID',
'_SYSTEMD_USER_UNIT',
'__SEQNUM',
'_COMM'
]
```The list of **levels** and the equivalent of *PRIORITY* JSON field:
```javascript
[
emerg: 0,
alert: 1,
crit: 2,
err: 3,
error: 3,
warning: 4,
warn: 4,
notice: 5,
info: 6,
debug: 7
]
```Also possible to use an alias to write a log message with a level like this:
```javascript
const MESSAGE = 'a pigeon over the roof';//add an entry to systemd-journal with debug level
await syslogger.debug(MESSAGE);//add an entry to systemd-journal with info level
await syslogger.info(MESSAGE);//add an entry to systemd-journal with notice level
await syslogger.notice(MESSAGE);//add an entry to systemd-journal with warning level
await syslogger.warn(MESSAGE);//add an entry to systemd-journal with error level
await syslogger.error(MESSAGE);//add an entry to systemd-journal with critical level
await syslogger.crit(MESSAGE);//add an entry to systemd-journal with alert level
await syslogger.alert(MESSAGE);//add an entry to systemd-journal with emergency level
await syslogger.emerg(MESSAGE);
```More info about [Journal JSON format](https://systemd.io/JOURNAL_EXPORT_FORMATS#journal-json-format)
More info also:
`$ man journalctl`
`$ man logger`
---
Feedback from usage and contributions are very welcome.
Also if you like it, please leave a :star: I would appreciate it ;)