DocumentationDiscussions
DocumentationDiscussions

Writing Seq Apps in C#

Seq apps can be written as simple C# classes packaged into standard NuGet .nupkg files.

👍

Full Source Code

The Seq.Apps project on GitHub contains heaps of examples to get you started.

The example below shows a snippet from the Formatted Email app, with full source available on GitHub.

Creating a new App Project

Apps are implemented in regular .NET 4.5 class libraries.

Once the project has been created, install the Seq.Apps NuGet package.

PM> Install-Package Seq.Apps

Declaring the main app class

The logic of the app lives in a subclass of SeqApp.

[SeqApp("Formatted Email",
    Description = "Uses a provided template to send events as formatted email.")]
public class EmailApp : SeqApp, ISubscribeTo<LogEventData>
{
    [SeqAppSetting(
        DisplayName = "From address",
        HelpText = "The account from which the email is being sent.")]
    public string From { get; set; }

(Complete example…)

Writing the On() method

The rest of the plugin is just as straight-forward: a few more fields, an On method, and some formatting helpers:

public void On(Event<LogEventData> evt)
{
    var body = string.IsNullOrWhiteSpace(BodyTemplate) ?
        FormatDefaultBody(evt) :
        FormatTemplate(BodyTemplate, evt);
 
    var subject = FormatTemplate(SubjectTemplate, evt);
 
    var client = new SmtpClient(Host, Port ?? 25);
    if (!string.IsNullOrWhiteSpace(Username))
        client.Credentials = new NetworkCredential(Username, Password);
 
    client.Send(From, To, subject, body);
}

Packaging

To package an app without third-party libraries, a simple nuget pack on the .csproj file is adequate.

If your app uses other libraries, these must be included as files in the package rather than specified as dependencies, because at run-time Seq will not load files from other packages.

🚧

Don't package the Seq.Apps.dll or Serilog.dll assemblies into your app. They're loaded automatically by the Seq server.

Looking at existing samples is the best way to get started, but the discussion forum is also a good place to ask for help.


Did this page help you?