Repository files navigation

Seq HTTP API Client NuGet Pre Release

This library includes:

  • C# representations of the entities exposed by the Seq HTTP API
  • Helper classes for interacting with the API

It's useful for querying events and working with configuration data - everything you can do using the Seq web UI, you can do programmatically via the API.

If you want to write events to Seq, use one of the logging framework clients, such as Serilog.Sinks.Seq or NLog.Targets.Seq instead.

Getting started

Install from NuGet:

dotnet add package Seq.Api

Create a SeqConnection with your server URL:

varconnection=newSeqConnection("http://localhost:5341");

Navigate the "resource groups" exposed as properties of the connnection:

varinstalledApps=awaitconnection.Apps.ListAsync();

To authenticate, the SeqConnection constructor accepts an apiKey parameter (make sure the API key permits user-level access) or, if you want to log in with personal credentials you can await connection.Users.LoginAsync(username, password).

For a more complete example, see the seq-tail app included in the source.

Creating entities

The Seq API provides a /template resource for each resource group that provides a new instance of the resource with defaults populated. The API client uses this pattern when creating new entities:

varsignal=awaitconnection.Signals.TemplateAsync();signal.Title="Signal 123";awaitconnection.Signals.AddAsync(signal);

See the signal-copy app for an example of this pattern in action.

Reading events

Seq internally limits the resources a query is allowed to consume. The query methods on SeqConnection.Events include a status with each result set - a Partial status indicates that further results must be retrieved.

The snippet below demonstrates lazily enumerating through results to retrieve the complete set.

varresultSet=connection.Events.EnumerateAsync(filter:"Environment = 'Test'",render:true,count:1000);awaitforeach(varevtinresultSet)Console.WriteLine(evt.RenderedMessage);

All methods that retrieve events require a count. The API client defaults this value to 30 if not specified.

Streaming events

Seq provides live streaming of events matching a filter and/or set of signals.

varfilter="@Level = 'Error'";awaitforeach(varevtinconnection.Events.StreamAsync<JObject>(filter:filter,clef:true)){varlogEvent=LogEventReader.ReadFromString(evt);Log.Write(logEvent);}

Events.StreamAsync() method returns IAsyncEnumerable<T> over a WebSocket. The enumerator will keep producing events until either it's disposed, or the server is shut down.

Seq streams the events in compact JSON format, which the Seq API client library can deserialize into JSON.NET JObjects for consumption.

Serilog.Formatting.Compact.Reader provides the LogEventReader class used above to turn these documents back into Serilog LogEvents. Having the events represented in Serilog’s object model means they can be passed back into a logging pipeline, as performed above using Log.Write().

Working with the basic client

The SeqApiClient class implements the low level interactions with the API's entities and links. It's one step up from System.Net.HttpClient - you may be able to use it in cases not supported by the high-level wrapper.

Create a SeqApiClient with your server URL:

varclient=newSeqApiClient("http://localhost:5341");

Get the root resource and use it to retrieve one or more of the resource groups:

varroot=awaitclient.GetRootAsync();varevents=awaitclient.GetAsync<ResourceGroup>(root,"EventsResources");

(Available resource groups, like Events, Users and so-on, can be seen in the root document's Links collection.)

Use the client to navigate links from entity to entity:

varmatched=awaitclient.ListAsync<EventEntity>(events,"Items",newDictionary<string,object>{{"count",10},{"render",true}});foreach(varmatchinmatched)Console.WriteLine(match.RenderedMessage);

Package versioning

This package does not follow the SemVer rule of major version increments for breaking changes. Instead, the package version tracks the Seq version it supports.

About

HTTP API client for Seq

Topics

Resources

Stars

86 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Seq HTTP API Client NuGet Pre Release

This library includes:

  • C# representations of the entities exposed by the Seq HTTP API
  • Helper classes for interacting with the API

It's useful for querying events and working with configuration data - everything you can do using the Seq web UI, you can do programmatically via the API.

If you want to write events to Seq, use one of the logging framework clients, such as Serilog.Sinks.Seq or NLog.Targets.Seq instead.

Getting started

Install from NuGet:

dotnet add package Seq.Api

Create a SeqConnection with your server URL:

varconnection=newSeqConnection("http://localhost:5341");

Navigate the "resource groups" exposed as properties of the connnection:

varinstalledApps=awaitconnection.Apps.ListAsync();

To authenticate, the SeqConnection constructor accepts an apiKey parameter (make sure the API key permits user-level access) or, if you want to log in with personal credentials you can await connection.Users.LoginAsync(username, password).

For a more complete example, see the seq-tail app included in the source.

Creating entities

The Seq API provides a /template resource for each resource group that provides a new instance of the resource with defaults populated. The API client uses this pattern when creating new entities:

varsignal=awaitconnection.Signals.TemplateAsync();signal.Title="Signal 123";awaitconnection.Signals.AddAsync(signal);

See the signal-copy app for an example of this pattern in action.

Reading events

Seq internally limits the resources a query is allowed to consume. The query methods on SeqConnection.Events include a status with each result set - a Partial status indicates that further results must be retrieved.

The snippet below demonstrates lazily enumerating through results to retrieve the complete set.

varresultSet=connection.Events.EnumerateAsync(filter:"Environment = 'Test'",render:true,count:1000);awaitforeach(varevtinresultSet)Console.WriteLine(evt.RenderedMessage);

All methods that retrieve events require a count. The API client defaults this value to 30 if not specified.

Streaming events

Seq provides live streaming of events matching a filter and/or set of signals.

varfilter="@Level = 'Error'";awaitforeach(varevtinconnection.Events.StreamAsync<JObject>(filter:filter,clef:true)){varlogEvent=LogEventReader.ReadFromString(evt);Log.Write(logEvent);}

Events.StreamAsync() method returns IAsyncEnumerable<T> over a WebSocket. The enumerator will keep producing events until either it's disposed, or the server is shut down.

Seq streams the events in compact JSON format, which the Seq API client library can deserialize into JSON.NET JObjects for consumption.

Serilog.Formatting.Compact.Reader provides the LogEventReader class used above to turn these documents back into Serilog LogEvents. Having the events represented in Serilog’s object model means they can be passed back into a logging pipeline, as performed above using Log.Write().

Working with the basic client

The SeqApiClient class implements the low level interactions with the API's entities and links. It's one step up from System.Net.HttpClient - you may be able to use it in cases not supported by the high-level wrapper.

Create a SeqApiClient with your server URL:

varclient=newSeqApiClient("http://localhost:5341");

Get the root resource and use it to retrieve one or more of the resource groups:

varroot=awaitclient.GetRootAsync();varevents=awaitclient.GetAsync<ResourceGroup>(root,"EventsResources");

(Available resource groups, like Events, Users and so-on, can be seen in the root document's Links collection.)

Use the client to navigate links from entity to entity:

varmatched=awaitclient.ListAsync<EventEntity>(events,"Items",newDictionary<string,object>{{"count",10},{"render",true}});foreach(varmatchinmatched)Console.WriteLine(match.RenderedMessage);

Package versioning

This package does not follow the SemVer rule of major version increments for breaking changes. Instead, the package version tracks the Seq version it supports.

About

HTTP API client for Seq

Topics

Resources

Stars

86 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Seq HTTP API Client NuGet Pre Release

This library includes:

  • C# representations of the entities exposed by the Seq HTTP API
  • Helper classes for interacting with the API

It's useful for querying events and working with configuration data - everything you can do using the Seq web UI, you can do programmatically via the API.

If you want to write events to Seq, use one of the logging framework clients, such as Serilog.Sinks.Seq or NLog.Targets.Seq instead.

Getting started

Install from NuGet:

dotnet add package Seq.Api

Create a SeqConnection with your server URL:

varconnection=newSeqConnection("http://localhost:5341");

Navigate the "resource groups" exposed as properties of the connnection:

varinstalledApps=awaitconnection.Apps.ListAsync();

To authenticate, the SeqConnection constructor accepts an apiKey parameter (make sure the API key permits user-level access) or, if you want to log in with personal credentials you can await connection.Users.LoginAsync(username, password).

For a more complete example, see the seq-tail app included in the source.

Creating entities

The Seq API provides a /template resource for each resource group that provides a new instance of the resource with defaults populated. The API client uses this pattern when creating new entities:

varsignal=awaitconnection.Signals.TemplateAsync();signal.Title="Signal 123";awaitconnection.Signals.AddAsync(signal);

See the signal-copy app for an example of this pattern in action.

Reading events

Seq internally limits the resources a query is allowed to consume. The query methods on SeqConnection.Events include a status with each result set - a Partial status indicates that further results must be retrieved.

The snippet below demonstrates lazily enumerating through results to retrieve the complete set.

varresultSet=connection.Events.EnumerateAsync(filter:"Environment = 'Test'",render:true,count:1000);awaitforeach(varevtinresultSet)Console.WriteLine(evt.RenderedMessage);

All methods that retrieve events require a count. The API client defaults this value to 30 if not specified.

Streaming events

Seq provides live streaming of events matching a filter and/or set of signals.

varfilter="@Level = 'Error'";awaitforeach(varevtinconnection.Events.StreamAsync<JObject>(filter:filter,clef:true)){varlogEvent=LogEventReader.ReadFromString(evt);Log.Write(logEvent);}

Events.StreamAsync() method returns IAsyncEnumerable<T> over a WebSocket. The enumerator will keep producing events until either it's disposed, or the server is shut down.

Seq streams the events in compact JSON format, which the Seq API client library can deserialize into JSON.NET JObjects for consumption.

Serilog.Formatting.Compact.Reader provides the LogEventReader class used above to turn these documents back into Serilog LogEvents. Having the events represented in Serilog’s object model means they can be passed back into a logging pipeline, as performed above using Log.Write().

Working with the basic client

The SeqApiClient class implements the low level interactions with the API's entities and links. It's one step up from System.Net.HttpClient - you may be able to use it in cases not supported by the high-level wrapper.

Create a SeqApiClient with your server URL:

varclient=newSeqApiClient("http://localhost:5341");

Get the root resource and use it to retrieve one or more of the resource groups:

varroot=awaitclient.GetRootAsync();varevents=awaitclient.GetAsync<ResourceGroup>(root,"EventsResources");

(Available resource groups, like Events, Users and so-on, can be seen in the root document's Links collection.)

Use the client to navigate links from entity to entity:

varmatched=awaitclient.ListAsync<EventEntity>(events,"Items",newDictionary<string,object>{{"count",10},{"render",true}});foreach(varmatchinmatched)Console.WriteLine(match.RenderedMessage);

Package versioning

This package does not follow the SemVer rule of major version increments for breaking changes. Instead, the package version tracks the Seq version it supports.

About

HTTP API client for Seq

Topics

Resources

Stars

86 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Seq HTTP API Client NuGet Pre Release

This library includes:

  • C# representations of the entities exposed by the Seq HTTP API
  • Helper classes for interacting with the API

It's useful for querying events and working with configuration data - everything you can do using the Seq web UI, you can do programmatically via the API.

If you want to write events to Seq, use one of the logging framework clients, such as Serilog.Sinks.Seq or NLog.Targets.Seq instead.

Getting started

Install from NuGet:

dotnet add package Seq.Api

Create a SeqConnection with your server URL:

varconnection=newSeqConnection("http://localhost:5341");

Navigate the "resource groups" exposed as properties of the connnection:

varinstalledApps=awaitconnection.Apps.ListAsync();

To authenticate, the SeqConnection constructor accepts an apiKey parameter (make sure the API key permits user-level access) or, if you want to log in with personal credentials you can await connection.Users.LoginAsync(username, password).

For a more complete example, see the seq-tail app included in the source.

Creating entities

The Seq API provides a /template resource for each resource group that provides a new instance of the resource with defaults populated. The API client uses this pattern when creating new entities:

varsignal=awaitconnection.Signals.TemplateAsync();signal.Title="Signal 123";awaitconnection.Signals.AddAsync(signal);

See the signal-copy app for an example of this pattern in action.

Reading events

Seq internally limits the resources a query is allowed to consume. The query methods on SeqConnection.Events include a status with each result set - a Partial status indicates that further results must be retrieved.

The snippet below demonstrates lazily enumerating through results to retrieve the complete set.

varresultSet=connection.Events.EnumerateAsync(filter:"Environment = 'Test'",render:true,count:1000);awaitforeach(varevtinresultSet)Console.WriteLine(evt.RenderedMessage);

All methods that retrieve events require a count. The API client defaults this value to 30 if not specified.

Streaming events

Seq provides live streaming of events matching a filter and/or set of signals.

varfilter="@Level = 'Error'";awaitforeach(varevtinconnection.Events.StreamAsync<JObject>(filter:filter,clef:true)){varlogEvent=LogEventReader.ReadFromString(evt);Log.Write(logEvent);}

Events.StreamAsync() method returns IAsyncEnumerable<T> over a WebSocket. The enumerator will keep producing events until either it's disposed, or the server is shut down.

Seq streams the events in compact JSON format, which the Seq API client library can deserialize into JSON.NET JObjects for consumption.

Serilog.Formatting.Compact.Reader provides the LogEventReader class used above to turn these documents back into Serilog LogEvents. Having the events represented in Serilog’s object model means they can be passed back into a logging pipeline, as performed above using Log.Write().

Working with the basic client

The SeqApiClient class implements the low level interactions with the API's entities and links. It's one step up from System.Net.HttpClient - you may be able to use it in cases not supported by the high-level wrapper.

Create a SeqApiClient with your server URL:

varclient=newSeqApiClient("http://localhost:5341");

Get the root resource and use it to retrieve one or more of the resource groups:

varroot=awaitclient.GetRootAsync();varevents=awaitclient.GetAsync<ResourceGroup>(root,"EventsResources");

(Available resource groups, like Events, Users and so-on, can be seen in the root document's Links collection.)

Use the client to navigate links from entity to entity:

varmatched=awaitclient.ListAsync<EventEntity>(events,"Items",newDictionary<string,object>{{"count",10},{"render",true}});foreach(varmatchinmatched)Console.WriteLine(match.RenderedMessage);

Package versioning

This package does not follow the SemVer rule of major version increments for breaking changes. Instead, the package version tracks the Seq version it supports.

About

HTTP API client for Seq

Topics

Resources

Stars

86 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Seq HTTP API Client NuGet Pre Release

This library includes:

  • C# representations of the entities exposed by the Seq HTTP API
  • Helper classes for interacting with the API

It's useful for querying events and working with configuration data - everything you can do using the Seq web UI, you can do programmatically via the API.

If you want to write events to Seq, use one of the logging framework clients, such as Serilog.Sinks.Seq or NLog.Targets.Seq instead.

Getting started

Install from NuGet:

dotnet add package Seq.Api

Create a SeqConnection with your server URL:

varconnection=newSeqConnection("http://localhost:5341");

Navigate the "resource groups" exposed as properties of the connnection:

varinstalledApps=awaitconnection.Apps.ListAsync();

To authenticate, the SeqConnection constructor accepts an apiKey parameter (make sure the API key permits user-level access) or, if you want to log in with personal credentials you can await connection.Users.LoginAsync(username, password).

For a more complete example, see the seq-tail app included in the source.

Creating entities

The Seq API provides a /template resource for each resource group that provides a new instance of the resource with defaults populated. The API client uses this pattern when creating new entities:

varsignal=awaitconnection.Signals.TemplateAsync();signal.Title="Signal 123";awaitconnection.Signals.AddAsync(signal);

See the signal-copy app for an example of this pattern in action.

Reading events

Seq internally limits the resources a query is allowed to consume. The query methods on SeqConnection.Events include a status with each result set - a Partial status indicates that further results must be retrieved.

The snippet below demonstrates lazily enumerating through results to retrieve the complete set.

varresultSet=connection.Events.EnumerateAsync(filter:"Environment = 'Test'",render:true,count:1000);awaitforeach(varevtinresultSet)Console.WriteLine(evt.RenderedMessage);

All methods that retrieve events require a count. The API client defaults this value to 30 if not specified.

Streaming events

Seq provides live streaming of events matching a filter and/or set of signals.

varfilter="@Level = 'Error'";awaitforeach(varevtinconnection.Events.StreamAsync<JObject>(filter:filter,clef:true)){varlogEvent=LogEventReader.ReadFromString(evt);Log.Write(logEvent);}

Events.StreamAsync() method returns IAsyncEnumerable<T> over a WebSocket. The enumerator will keep producing events until either it's disposed, or the server is shut down.

Seq streams the events in compact JSON format, which the Seq API client library can deserialize into JSON.NET JObjects for consumption.

Serilog.Formatting.Compact.Reader provides the LogEventReader class used above to turn these documents back into Serilog LogEvents. Having the events represented in Serilog’s object model means they can be passed back into a logging pipeline, as performed above using Log.Write().

Working with the basic client

The SeqApiClient class implements the low level interactions with the API's entities and links. It's one step up from System.Net.HttpClient - you may be able to use it in cases not supported by the high-level wrapper.

Create a SeqApiClient with your server URL:

varclient=newSeqApiClient("http://localhost:5341");

Get the root resource and use it to retrieve one or more of the resource groups:

varroot=awaitclient.GetRootAsync();varevents=awaitclient.GetAsync<ResourceGroup>(root,"EventsResources");

(Available resource groups, like Events, Users and so-on, can be seen in the root document's Links collection.)

Use the client to navigate links from entity to entity:

varmatched=awaitclient.ListAsync<EventEntity>(events,"Items",newDictionary<string,object>{{"count",10},{"render",true}});foreach(varmatchinmatched)Console.WriteLine(match.RenderedMessage);

Package versioning

This package does not follow the SemVer rule of major version increments for breaking changes. Instead, the package version tracks the Seq version it supports.

About

HTTP API client for Seq

Topics

Resources

Stars

86 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Seq HTTP API Client NuGet Pre Release

This library includes:

  • C# representations of the entities exposed by the Seq HTTP API
  • Helper classes for interacting with the API

It's useful for querying events and working with configuration data - everything you can do using the Seq web UI, you can do programmatically via the API.

If you want to write events to Seq, use one of the logging framework clients, such as Serilog.Sinks.Seq or NLog.Targets.Seq instead.

Getting started

Install from NuGet:

dotnet add package Seq.Api

Create a SeqConnection with your server URL:

varconnection=newSeqConnection("http://localhost:5341");

Navigate the "resource groups" exposed as properties of the connnection:

varinstalledApps=awaitconnection.Apps.ListAsync();

To authenticate, the SeqConnection constructor accepts an apiKey parameter (make sure the API key permits user-level access) or, if you want to log in with personal credentials you can await connection.Users.LoginAsync(username, password).

For a more complete example, see the seq-tail app included in the source.

Creating entities

The Seq API provides a /template resource for each resource group that provides a new instance of the resource with defaults populated. The API client uses this pattern when creating new entities:

varsignal=awaitconnection.Signals.TemplateAsync();signal.Title="Signal 123";awaitconnection.Signals.AddAsync(signal);

See the signal-copy app for an example of this pattern in action.

Reading events

Seq internally limits the resources a query is allowed to consume. The query methods on SeqConnection.Events include a status with each result set - a Partial status indicates that further results must be retrieved.

The snippet below demonstrates lazily enumerating through results to retrieve the complete set.

varresultSet=connection.Events.EnumerateAsync(filter:"Environment = 'Test'",render:true,count:1000);awaitforeach(varevtinresultSet)Console.WriteLine(evt.RenderedMessage);

All methods that retrieve events require a count. The API client defaults this value to 30 if not specified.

Streaming events

Seq provides live streaming of events matching a filter and/or set of signals.

varfilter="@Level = 'Error'";awaitforeach(varevtinconnection.Events.StreamAsync<JObject>(filter:filter,clef:true)){varlogEvent=LogEventReader.ReadFromString(evt);Log.Write(logEvent);}

Events.StreamAsync() method returns IAsyncEnumerable<T> over a WebSocket. The enumerator will keep producing events until either it's disposed, or the server is shut down.

Seq streams the events in compact JSON format, which the Seq API client library can deserialize into JSON.NET JObjects for consumption.

Serilog.Formatting.Compact.Reader provides the LogEventReader class used above to turn these documents back into Serilog LogEvents. Having the events represented in Serilog’s object model means they can be passed back into a logging pipeline, as performed above using Log.Write().

Working with the basic client

The SeqApiClient class implements the low level interactions with the API's entities and links. It's one step up from System.Net.HttpClient - you may be able to use it in cases not supported by the high-level wrapper.

Create a SeqApiClient with your server URL:

varclient=newSeqApiClient("http://localhost:5341");

Get the root resource and use it to retrieve one or more of the resource groups:

varroot=awaitclient.GetRootAsync();varevents=awaitclient.GetAsync<ResourceGroup>(root,"EventsResources");

(Available resource groups, like Events, Users and so-on, can be seen in the root document's Links collection.)

Use the client to navigate links from entity to entity:

varmatched=awaitclient.ListAsync<EventEntity>(events,"Items",newDictionary<string,object>{{"count",10},{"render",true}});foreach(varmatchinmatched)Console.WriteLine(match.RenderedMessage);

Package versioning

This package does not follow the SemVer rule of major version increments for breaking changes. Instead, the package version tracks the Seq version it supports.

About

HTTP API client for Seq

Topics

Resources

Stars

86 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Seq HTTP API Client NuGet Pre Release

This library includes:

  • C# representations of the entities exposed by the Seq HTTP API
  • Helper classes for interacting with the API

It's useful for querying events and working with configuration data - everything you can do using the Seq web UI, you can do programmatically via the API.

If you want to write events to Seq, use one of the logging framework clients, such as Serilog.Sinks.Seq or NLog.Targets.Seq instead.

Getting started

Install from NuGet:

dotnet add package Seq.Api

Create a SeqConnection with your server URL:

varconnection=newSeqConnection("http://localhost:5341");

Navigate the "resource groups" exposed as properties of the connnection:

varinstalledApps=awaitconnection.Apps.ListAsync();

To authenticate, the SeqConnection constructor accepts an apiKey parameter (make sure the API key permits user-level access) or, if you want to log in with personal credentials you can await connection.Users.LoginAsync(username, password).

For a more complete example, see the seq-tail app included in the source.

Creating entities

The Seq API provides a /template resource for each resource group that provides a new instance of the resource with defaults populated. The API client uses this pattern when creating new entities:

varsignal=awaitconnection.Signals.TemplateAsync();signal.Title="Signal 123";awaitconnection.Signals.AddAsync(signal);

See the signal-copy app for an example of this pattern in action.

Reading events

Seq internally limits the resources a query is allowed to consume. The query methods on SeqConnection.Events include a status with each result set - a Partial status indicates that further results must be retrieved.

The snippet below demonstrates lazily enumerating through results to retrieve the complete set.

varresultSet=connection.Events.EnumerateAsync(filter:"Environment = 'Test'",render:true,count:1000);awaitforeach(varevtinresultSet)Console.WriteLine(evt.RenderedMessage);

All methods that retrieve events require a count. The API client defaults this value to 30 if not specified.

Streaming events

Seq provides live streaming of events matching a filter and/or set of signals.

varfilter="@Level = 'Error'";awaitforeach(varevtinconnection.Events.StreamAsync<JObject>(filter:filter,clef:true)){varlogEvent=LogEventReader.ReadFromString(evt);Log.Write(logEvent);}

Events.StreamAsync() method returns IAsyncEnumerable<T> over a WebSocket. The enumerator will keep producing events until either it's disposed, or the server is shut down.

Seq streams the events in compact JSON format, which the Seq API client library can deserialize into JSON.NET JObjects for consumption.

Serilog.Formatting.Compact.Reader provides the LogEventReader class used above to turn these documents back into Serilog LogEvents. Having the events represented in Serilog’s object model means they can be passed back into a logging pipeline, as performed above using Log.Write().

Working with the basic client

The SeqApiClient class implements the low level interactions with the API's entities and links. It's one step up from System.Net.HttpClient - you may be able to use it in cases not supported by the high-level wrapper.

Create a SeqApiClient with your server URL:

varclient=newSeqApiClient("http://localhost:5341");

Get the root resource and use it to retrieve one or more of the resource groups:

varroot=awaitclient.GetRootAsync();varevents=awaitclient.GetAsync<ResourceGroup>(root,"EventsResources");

(Available resource groups, like Events, Users and so-on, can be seen in the root document's Links collection.)

Use the client to navigate links from entity to entity:

varmatched=awaitclient.ListAsync<EventEntity>(events,"Items",newDictionary<string,object>{{"count",10},{"render",true}});foreach(varmatchinmatched)Console.WriteLine(match.RenderedMessage);

Package versioning

This package does not follow the SemVer rule of major version increments for breaking changes. Instead, the package version tracks the Seq version it supports.

About

HTTP API client for Seq

Topics

Resources

Stars

86 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Seq HTTP API Client NuGet Pre Release

This library includes:

  • C# representations of the entities exposed by the Seq HTTP API
  • Helper classes for interacting with the API

It's useful for querying events and working with configuration data - everything you can do using the Seq web UI, you can do programmatically via the API.

If you want to write events to Seq, use one of the logging framework clients, such as Serilog.Sinks.Seq or NLog.Targets.Seq instead.

Getting started

Install from NuGet:

dotnet add package Seq.Api

Create a SeqConnection with your server URL:

varconnection=newSeqConnection("http://localhost:5341");

Navigate the "resource groups" exposed as properties of the connnection:

varinstalledApps=awaitconnection.Apps.ListAsync();

To authenticate, the SeqConnection constructor accepts an apiKey parameter (make sure the API key permits user-level access) or, if you want to log in with personal credentials you can await connection.Users.LoginAsync(username, password).

For a more complete example, see the seq-tail app included in the source.

Creating entities

The Seq API provides a /template resource for each resource group that provides a new instance of the resource with defaults populated. The API client uses this pattern when creating new entities:

varsignal=awaitconnection.Signals.TemplateAsync();signal.Title="Signal 123";awaitconnection.Signals.AddAsync(signal);

See the signal-copy app for an example of this pattern in action.

Reading events

Seq internally limits the resources a query is allowed to consume. The query methods on SeqConnection.Events include a status with each result set - a Partial status indicates that further results must be retrieved.

The snippet below demonstrates lazily enumerating through results to retrieve the complete set.

varresultSet=connection.Events.EnumerateAsync(filter:"Environment = 'Test'",render:true,count:1000);awaitforeach(varevtinresultSet)Console.WriteLine(evt.RenderedMessage);

All methods that retrieve events require a count. The API client defaults this value to 30 if not specified.

Streaming events

Seq provides live streaming of events matching a filter and/or set of signals.

varfilter="@Level = 'Error'";awaitforeach(varevtinconnection.Events.StreamAsync<JObject>(filter:filter,clef:true)){varlogEvent=LogEventReader.ReadFromString(evt);Log.Write(logEvent);}

Events.StreamAsync() method returns IAsyncEnumerable<T> over a WebSocket. The enumerator will keep producing events until either it's disposed, or the server is shut down.

Seq streams the events in compact JSON format, which the Seq API client library can deserialize into JSON.NET JObjects for consumption.

Serilog.Formatting.Compact.Reader provides the LogEventReader class used above to turn these documents back into Serilog LogEvents. Having the events represented in Serilog’s object model means they can be passed back into a logging pipeline, as performed above using Log.Write().

Working with the basic client

The SeqApiClient class implements the low level interactions with the API's entities and links. It's one step up from System.Net.HttpClient - you may be able to use it in cases not supported by the high-level wrapper.

Create a SeqApiClient with your server URL:

varclient=newSeqApiClient("http://localhost:5341");

Get the root resource and use it to retrieve one or more of the resource groups:

varroot=awaitclient.GetRootAsync();varevents=awaitclient.GetAsync<ResourceGroup>(root,"EventsResources");

(Available resource groups, like Events, Users and so-on, can be seen in the root document's Links collection.)

Use the client to navigate links from entity to entity:

varmatched=awaitclient.ListAsync<EventEntity>(events,"Items",newDictionary<string,object>{{"count",10},{"render",true}});foreach(varmatchinmatched)Console.WriteLine(match.RenderedMessage);

Package versioning

This package does not follow the SemVer rule of major version increments for breaking changes. Instead, the package version tracks the Seq version it supports.

About

HTTP API client for Seq

Topics

Resources

Stars

86 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages