
A Visual Studio 2022 extension that provides syntax highlighting, brace matching, property-argument highlighting, and navigation features for Serilog message templates in C#/.NET projects.
Features
🎨 Syntax Highlighting
- Automatic theme-aware colors - automatically switches between Light and Dark Visual Studio themes
- WCAG AA compliant - all colors maintain ≥4.5:1 contrast ratio for accessibility
- Property names highlighted in blue:
{UserId}, {UserName}
- Destructuring operator
@ highlighted in orange: {@User}
- Stringification operator
$ highlighted in orange: {$Settings}
- Format specifiers highlighted in green:
{Timestamp:yyyy-MM-dd}
- Alignment highlighted in red:
{Name,10}, {Price,-8}
- Positional parameters highlighted in purple:
{0}, {1}
- Property braces highlighted in gray for structure
- Multi-line verbatim strings fully supported with proper highlighting across lines
- C# 11 raw string literals supported with
""" delimiters for complex templates
🔦 Property-Argument Highlighting
- Interactive highlighting of property-argument connections
- When cursor is on a template property (e.g.,
{UserId}), both the property and its corresponding argument are highlighted
- When cursor is on an argument, both the argument and its template property are highlighted
- Works across all string literal types (regular, verbatim
@"...", raw """...""""")
- Handles complex scenarios including multi-line templates, collection expressions, and anonymous objects
- Press ESC to dismiss highlights
✨ Serilog.Expressions Support
- Filter expressions in
Filter.ByExcluding() and Filter.ByIncludingOnly()
- Expression templates with control flow directives (
{#if}, {#each}, {#else}, {#end})
- Operators highlighted distinctly:
and, or, not, like, in, is null
- Functions highlighted:
StartsWith(), Contains(), Length(), etc.
- Built-in properties:
@t, @m, @l, @x, @i, @p
- Computed properties in
Enrich.WithComputed()
- Conditional writes in
WriteTo.Conditional()
🔗 Navigation
- Navigate from template properties to their corresponding arguments
- Light bulb suggestions when hovering over properties
🔍 Brace Matching
- Highlight matching braces when cursor is positioned on
{ or }
- Visual indication of brace pairs in complex templates
- Multi-line support - matches braces across line boundaries in verbatim and raw strings
- Press ESC to temporarily dismiss highlights
- Helps identify mismatched or nested braces
Supported Serilog Syntax
Works with all Serilog logging methods including:
- Direct Serilog calls:
Log.Information(), Log.Debug(), etc.
- ILogger interface:
logger.LogInformation(), logger.LogError(), etc.
- ForContext chains:
Log.ForContext<T>().Information()
- BeginScope:
logger.BeginScope("Operation={Id}", id)
- LogError with exception:
logger.LogError(ex, "Message", args)
| |