ln-771-logging-configurator

Configures structured logging (Serilog/.NET, structlog/Python)

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "ln-771-logging-configurator" with this command: npx skills add levnikolaevich/claude-code-skills/levnikolaevich-claude-code-skills-ln-771-logging-configurator

ln-771-logging-configurator

Type: L3 Worker Category: 7XX Project Bootstrap Parent: ln-770-crosscutting-setup

Configures structured JSON logging for .NET and Python projects.


Overview

AspectDetails
InputContext Store from ln-770
OutputLogging configuration files
Stacks.NET (Serilog), Python (structlog)

Phase 1: Receive Context

Accept Context Store from coordinator.

Required Context:

  • STACK: .NET or Python
  • FRAMEWORK: ASP.NET Core or FastAPI
  • FRAMEWORK_VERSION: Version number
  • PROJECT_ROOT: Project directory path
  • ENVIRONMENT: Development or Production

Validation:

  • If STACK not provided, detect from project files
  • If version not provided, use latest stable

Phase 2: Research Current Best Practices

Use MCP tools to get up-to-date documentation.

For .NET (Serilog):

MCP ref: "Serilog ASP.NET Core structured logging configuration"
Context7: /serilog/serilog-aspnetcore

For Python (structlog):

MCP ref: "structlog Python structured logging configuration"
Context7: /hynek/structlog

Key Patterns to Research:

  1. Request logging middleware
  2. Log enrichment (correlation ID, user context)
  3. Log level configuration by environment
  4. Sink configuration (Console, File, Seq, Elastic)

Phase 3: Decision Points

Ask user for configuration preferences.

Q1: Log Format

OptionWhen to Use
JSON (Recommended for Production)Machine-readable, log aggregation systems
Pretty/Colored (Recommended for Development)Human-readable, local debugging

Q2: Enrichment Fields

FieldDescriptionDefault
correlationIdRequest tracking across services✓ Yes
userIdAuthenticated user identifier✓ Yes
requestPathHTTP request path✓ Yes
responseTimeRequest duration in ms✓ Yes
machineNameServer hostnameOptional
threadIdThread identifierOptional

Q3: Log Sinks

SinkUse Case
ConsoleAlways enabled
FileLocal persistence, log rotation
SeqStructured log server
ElasticsearchLog aggregation at scale

Q4: Log Levels by Environment

LevelDevelopmentProduction
DefaultDebugInformation
Microsoft.*InformationWarning
System.*InformationWarning
ApplicationDebugInformation

Phase 4: Generate Configuration

Generate files based on stack and decisions.

.NET Output Files

FilePurpose
Extensions/LoggingExtensions.csService registration
appsettings.json (update)Serilog configuration
appsettings.Development.json (update)Dev overrides

Generation Process:

  1. Use MCP ref to get current Serilog API
  2. Generate LoggingExtensions.cs with:
    • UseSerilog configuration
    • Request logging middleware
    • Enrichment configuration
  3. Update appsettings.json with Serilog section

Packages to Add:

  • Serilog.AspNetCore
  • Serilog.Sinks.Console
  • Serilog.Sinks.File (if File sink selected)
  • Serilog.Enrichers.Environment (if machineName selected)

Python Output Files

FilePurpose
core/logging_config.pystructlog configuration
middleware/logging_middleware.pyRequest logging

Generation Process:

  1. Use MCP ref to get current structlog API
  2. Generate logging_config.py with:
    • Processor chain configuration
    • Renderer selection (JSON/Console)
    • Log level configuration
  3. Generate logging_middleware.py for FastAPI

Packages to Add:

  • structlog
  • python-json-logger (if JSON format)

Phase 5: Validate

Verify the configuration works.

Validation Steps:

  1. Check imports: Ensure all packages are available

    • .NET: dotnet list package | grep Serilog
    • Python: pip list | grep structlog
  2. Syntax check:

    • .NET: dotnet build --no-restore
    • Python: python -m py_compile core/logging_config.py
  3. Test log output:

    • Start application
    • Make test request
    • Verify log format matches configuration

Expected Log Format:

{
  "timestamp": "2026-01-10T12:00:00.000Z",
  "level": "info",
  "message": "Request completed",
  "correlationId": "abc-123",
  "requestPath": "/api/health",
  "responseTime": 45,
  "statusCode": 200
}

Return to Coordinator

Return result to ln-770:

{
  "status": "success",
  "files_created": [
    "Extensions/LoggingExtensions.cs",
    "appsettings.json"
  ],
  "packages_added": [
    "Serilog.AspNetCore",
    "Serilog.Sinks.Console"
  ],
  "registration_code": "services.AddLoggingServices(configuration);",
  "message": "Configured structured logging with Serilog"
}

Idempotency

This skill is idempotent:

  • Phase 1: Check if logging already configured (Grep for Serilog/structlog)
  • If configured: Return { "status": "skipped", "message": "Logging already configured" }
  • If not: Proceed with configuration

Reference Links


Critical Rules

  • Use MCP ref/Context7 for current API — do not hardcode Serilog/structlog config from memory
  • Idempotent — if Serilog or structlog already configured, return status: "skipped" immediately
  • Environment-aware log levels — Debug for Development, Information for Production (never Warning default)
  • Always include correlation ID enrichment — required for distributed tracing
  • Return structured responsefiles_created, packages_added, registration_code for coordinator aggregation

Definition of Done

  • Context Store received and validated (stack, framework, version)
  • Best practices researched via MCP tools for target stack
  • User decisions collected (format, enrichment, sinks, log levels)
  • Configuration files generated (extensions/config + appsettings or Python modules)
  • Syntax validated (dotnet build or py_compile)
  • Structured JSON response returned to ln-770 coordinator

Version: 2.0.0 Last Updated: 2026-01-10

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

ln-782-test-runner

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

ln-140-test-docs-creator

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

ln-110-project-docs-coordinator

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

ln-150-presentation-creator

No summary provided by upstream source.

Repository SourceNeeds Review