serilog-sinks-seq icon indicating copy to clipboard operation
serilog-sinks-seq copied to clipboard

Accept an `IFormatProvider`

Open taspeotis opened this issue 3 years ago • 3 comments

I'd like to render a currency value in my log output. For the sake of discussion:

decimal currentBalance = 12345.67M;

Log.Logger.Information("Your balance is {CurrentBalance:C}", currentBalance);

As best I can tell Seq uses the invariant culture which renders currencies like ¤12,345.67 (or (¤12,345.67) for negative). I sympathise with the choice of invariant culture as a good default but its currency format is not very native to me.

Serilog's documentation suggests the onus is on sinks to support format providers, and I can't see any way to give Seq a CustomDecimalFormatter or similar.

For now I am using {CurrentBalance:$#,0.00} as a workaround, I'd prefer to use C and get a en-AU/en-US style currency.

If I've overlooked how to specify a format provider for this sink please let me know, otherwise I submit "Specify Format Provider" as a feature request for your consideration.

taspeotis avatar May 14 '21 04:05 taspeotis

Thanks for the suggestion, Todd - makes perfect sense :+1:

There are a few moving parts to this; Seq uses Serilog.Formatting.Compact.CompactJsonFormatter to format its payloads:

https://github.com/serilog/serilog-sinks-seq/blob/3152e1d59fbbbc07ea97f3f3cba3e48914659a8b/src/Serilog.Sinks.Seq/Sinks/Seq/SeqPayloadFormatter.cs#L40

CompactJsonFormatter renders any message template tokens that have formats associated with them:

https://github.com/serilog/serilog-formatting-compact/blob/dev/src/Serilog.Formatting.Compact/Formatting/Compact/CompactJsonFormatter.cs#L84

But unfortunately, it doesn't supply the third IFormatProvider parameter to PropertyToken.Render().

Right now the quickest option will probably be for us to take over the formatting responsibility here in the Seq sink, and accept an IFormatProvider through WriteTo.Seq(), but I suspect longer-term we'll need to consider some changes in Serilog.Formatting.Compact to accommodate this.

nblumhardt avatar May 14 '21 05:05 nblumhardt