Writing Seq Apps in Other Languages
Seq apps can be written as standard processes in any language, with configuration read from environment variables, read events from stdin
and write events to stderr
.
For a detailed walkthrough of writing a Seq app, using Rust as an example, see Writing a simple Seq App in Rust.
Specifying settings in the app definition
To tell Seq which settings are available for an app, we need to package an app definition file alongside the executable. Here's an example app definition with a single setting called propertyToTotal
:
{
"name": "Total Example",
"description": "Keeps and prints a running total of a numeric property.",
"executable": "total.exe",
"settings": {
"propertyToTotal": {
"displayName": "Property to total",
"helpText": "The name of a numeric property for the app to detect and report the total of."
}
}
}
Reading settings from the environment
Apps can accept settings that a Seq user provides through the UI when configuring an app instance.
The value we provide will be passed to the app in an environment variable named using the pattern SEQ_APP_SETTING_*
, where *
is the setting name. For example, a setting called propertyToTotal
will be available to a running app as an environment variable called SEQ_APP_SETTING_PROPERTYTOTOTAL
.
Reading input events from stdin
stdin
Once the app process is started, Seq will write events as JSON documents, one per line, to the app’s standard input.
The events themselves are in the compact JSON format written by Serilog.Formatting.Compact. A typical event might look like:
{"@t":"2017-08-25T14:55:32.456","@mt":"Dispensed {Volume} L","Volume":10.1}
Writing output events to stderr
stderr
Most Seq apps don’t write events back to Seq, or only do this to report problems.
Since it can be hard to prevent some libraries writing junk to stdout
, Seq reads output events from stderr
instead (arguably, stderr
is the right place for diagnostic output anyway). The output format is the same as the input: compact JSON documents, one per line.
Updated less than a minute ago