DocumentationDiscussions
DocumentationDiscussions

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

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

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.

Supplied environment variables

Seq will set the following environment variables for the app to consume.

Environment variable

Purpose

Example value

SEQ_APP_ID

The id of the Seq app instance being executed

appinstance-123

SEQ_APP_TITLE

The title of the Seq app instance being executed

Email Dev Team

SEQ_APP_STORAGEPATH

A directory in which app-specific data can be stored

/data/my-app

SEQ_INSTANCE_BASEURI

The base URI of the Seq server that is hosting the app

https://seq.example.com

SEQ_INSTANCE_NAME

The instance name of the Seq server that is hosting the app

Production


Did this page help you?