GithubHelp home page GithubHelp logo

lucadecamillis / serilog-sinks-spectre Goto Github PK

View Code? Open in Web Editor NEW
17.0 1.0 7.0 61 KB

C# serilog sink for spectre console

License: Apache License 2.0

C# 100.00%
serilog serilog-sink spectre-console microsoft-extensions-logging

serilog-sinks-spectre's Introduction

Serilog.Sinks.Spectre Build status NuGet

C# Serilog sink for Spectre.Console. Started as C# port of the F# package Serilog.Sinks.SpectreConsole, later the code has been refactored to be more in line with the internal design of Spectre.Console.

Usage

Install the package via nuget:

dotnet add package Serilog.Sinks.Spectre

The sink can be enabled using WriteTo.Spectre():

Log.Logger = new LoggerConfiguration()
    .WriteTo.Spectre()
    .CreateLogger();

The format of events to the console can be modified using the outputTemplate configuration parameter:

    .WriteTo.Spectre(outputTemplate: "[{Timestamp:HH:mm:ss.fff} {Level:u3}] {Message:lj}{NewLine}{Exception}")

The sink configuration also supports the restrictedToMinimumLevel and levelSwitch parameters:

    .WriteTo.Spectre(restrictedToMinimumLevel: LogEventLevel.Warning)
    .WriteTo.Spectre(levelSwitch: new LoggingLevelSwitch(LogEventLevel.Warning))

The sink can also be configured via appsettings.json using the Microsoft.Extensions.Configuration package:

{
    "Serilog": {
        "MinimumLevel": "Debug",
        "WriteTo": [
            {
                "Name": "Spectre",
                "Args": {
                    "outputTemplate": "[{Timestamp:HH:mm:ss.fff} {Level:u3}] {Message:lj}{NewLine}{Exception}"
                }
            }
        ]
    }
}

Special attention has been paid to the integration of Serilog with Microsoft.Extensions.Logging. Check out the Space Library example demo. (taken from spectre.console samples).

serilog-sinks-spectre's People

Contributors

dgosbell avatar lucadecamillis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

serilog-sinks-spectre's Issues

Support Serilog.Expressions (ITextFormatter)

Hello,
I was wondering if the author has better ideas than mines on how would be a possible way to implement support for serilog expressions.
I'm trying to play with a local fork (see here and here, but it does not seems to be easy as I thought.
Thanks

Crash for EF Core logs: System.InvalidOperationException: Encountered malformed markup tag at position 16.

The Sink can't output EF Core logs that contains SQL queries, I guess it might be because brackets are used?

###Stacktrace

2024-05-22T08:35:51.5205282Z Caught exception while emitting to sink Serilog.Sinks.Spectre.SpectreConsoleSink: System.InvalidOperationException: Encountered malformed markup tag at position 16.
   at Spectre.Console.MarkupTokenizer.ReadMarkup() in /_/src/Spectre.Console/Internal/Text/Markup/MarkupTokenizer.cs:line 183
   at Spectre.Console.MarkupTokenizer.MoveNext() in /_/src/Spectre.Console/Internal/Text/Markup/MarkupTokenizer.cs:line 27
   at Spectre.Console.MarkupParser.Parse(String text, Style style) in /_/src/Spectre.Console/Internal/Text/Markup/MarkupParser.cs:line 19
   at Spectre.Console.Markup..ctor(String text, Style style) in /_/src/Spectre.Console/Widgets/Markup.cs:line 42
   at Serilog.Sinks.Spectre.Renderers.MessageTemplateOutputTokenRenderer.Render(LogEvent logEvent)+MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.SparseArrayBuilder`1.ReserveOrAdd(IEnumerable`1 items)
   at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.ToArray()
   at Serilog.Sinks.Spectre.SpectreConsoleSink.Emit(LogEvent logEvent)
   at Serilog.Core.Sinks.SafeAggregateSink.Emit(LogEvent logEvent)

This is how the log is printed using the normal Console Sink:

      [10:32:49 INF] Executed DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT [p].[Id], [p].[ChangedBy], [p].[ChangedOn], [p].[CreatedBy], [p].[CreatedOn], [p].[GroupId], [p].[Name], [t].[CategoriesId], [t].[ParametersId], [t].[Id], [t].[Name]
FROM [Parameters] AS [p]
LEFT JOIN (
    SELECT [c].[CategoriesId], [c].[ParametersId], [c0].[Id], [c0].[Name]
    FROM [CategoryParameter] AS [c]
    INNER JOIN [Categories] AS [c0] ON [c].[CategoriesId] = [c0].[Id]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.