Skip to content

Conversation

@Aaronontheweb
Copy link
Member

Summary

Adds semantic logging support to leverage Akka.NET's new semantic logging APIs introduced in version 1.5.56.

This enhancement populates NLog's LogEventInfo.Properties dictionary with structured properties extracted from log message templates, enabling NLog layouts and targets to access structured data by property name.

Changes

  • NLogLogger.cs: Modified LogEvent() method to extract structured properties using TryGetProperties() and populate LogEventInfo.Properties
  • SemanticLoggingSpecs.cs: Added comprehensive test suite with 8 tests covering all semantic logging scenarios

Test Coverage

New test suite includes:

  • Named and positional template properties
  • Multiple properties handling
  • Complex object properties
  • Akka metadata preservation
  • Format specifiers handling
  • Empty properties handling
  • all-event-properties support

All 8 existing tests pass.

Example Usage

NLog layouts can now access structured properties using event-properties syntax, or access all properties at once.

Backwards Compatibility

Fully backwards compatible through conditional TryGetProperties() check. Works with both older and newer Akka.NET versions.

Dependencies

Requires Akka.NET >= 1.5.56 (not yet released)

Notes

  • CI/CD will fail until Akka.NET 1.5.56 is published to NuGet
  • This PR is ready for review but should not be merged until the Akka.NET dependency is available

Enhances NLogLogger to leverage Akka.NET's new semantic logging APIs
introduced in version 1.5.56. This change enables structured properties
to be accessible in NLog's LogEventInfo.Properties dictionary.

Changes:
- Modified NLogLogger.LogEvent() to extract structured properties using
  TryGetProperties() and populate LogEventInfo.Properties dictionary
- NLog layouts and targets can now access structured properties by name
  using ${event-properties:PropertyName} syntax
- Added comprehensive test suite (SemanticLoggingSpecs.cs) with 8 tests covering:
  * Named and positional template properties
  * Multiple properties handling
  * Complex object properties
  * Akka metadata preservation
  * Format specifiers handling
  * ${all-event-properties} support

All existing tests pass (8 tests). Backwards compatible through
TryGetProperties() conditional check.

Example NLog layout usage:
  ${event-properties:UserId}|${event-properties:Email}

Depends on: Akka.NET >= 1.5.56
- Updated Akka.NET dependency from 1.5.46 to 1.5.56
- Added FluentAssertions package for semantic logging tests
- Required for semantic logging API support
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant