Comments (6)
That's interesting - thanks for the info.
For file output this makes sense; for other back-ends having properties like RequestId
at the top level is a more useful.
There's nothing to prevent us having both: pushing the scope object onto the stack and decomposing it, so you'd get:
2017-02-15 15:28:34 [Information] [{RequestId: "0HL2LV9E249UM", RequestPath: "/"}, "Main", "Main2"] Waiting for user input
(Or something pretty similar, if we use the formatter to convert the value into its string form.)
The down-side would be the extra weight in the Scope
payload, duplicating info we've already attached to the event. In some situations I can see this making a pretty substantial impact on event size, it's not unusual to have quite a lot of scope data:
Not all properties above are coming in via BeginScope()
, but a lot are (ActionId
, ActionName
, ...) and I don't know how usable this would be when rendered out into a log file. Serilog.Extensions.Logging.File gets around this by picking a few key properties like RequestId
and giving them special treatment.
The current scheme manages to preserve all of the available information fairly efficiently. FWIW, I wrote up the scheme we're using a little while ago - https://nblumhardt.com/2016/11/ilogger-beginscope/ - I don't think there's much more detail in that post than you already have, though.
Thoughts?
from serilog-extensions-logging.
@nblumhardt what if we only add .ToString()
representation of scope value to Scope
property?
from serilog-extensions-logging.
@pakrym I don't think it would make much difference - the text wo
from serilog-extensions-logging.
(Keyboard fumble..)
The text would still be long, and the amount of data attached to the event would be similar. That ActionName
property for example would still push the rest of the event information far out into the right column.
How does the console provider end up looking when scope gets heavy use? Is it still readable? I haven't had any experience with the built-in providers yet, personally.
from serilog-extensions-logging.
Now that it's possible to include {Properties}
in Serilog console output templates, I think this is a reasonable alternative to including everything in the rendering of {Scope}
; although it's a strong suggestion, I don't think we're likely to tackle this in the near future. Thanks @pakrym !
from serilog-extensions-logging.
In my case, I had to make a easy.
Here's the code on github:
https://github.com/wzuqui/Serilog.Enrichers.ActionName/blob/master/ActionName.cs
from serilog-extensions-logging.
Related Issues (20)
- No exceptions emitted when generated by faulty audit log configuration HOT 4
- Upgrade codebase HOT 2
- Serilog keeps throwing ArgumentNullException HOT 10
- Add API approval test
- Could not load file or assembly 'Microsoft.Extensions.Logging, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' HOT 2
- Serilog.Extensions.Logging 7.0.0 has a .NET 6.0 TFM with dependencies on 7.0 HOT 3
- Serilog.Extensions.Logging v7 .net6 requires v7 Microsoft.Extensions.Logging pkg
- Unit tests fail when run for .Net Framework HOT 2
- SerilogLogger.cs - Always calls formatter with the Exception parameter as null HOT 1
- SerilogLogger.cs: PrepareWrite Method not found Serilog.Events.LogEvent..ctor HOT 3
- Serilog .NET 8 Windows Service (worker) using BackgroundService Log file not found HOT 2
- Pass-through of `M.E.L.ILogger.BeginScope()` when using custom MEL `ILoggingProvider` as Serilog sink? HOT 5
- Avoid boxing of TState HOT 6
- M.E.L. Log category support exists but is non-obvious on how to include it in text sinks
- Support ActivityTrackingOptions to enrich logs with Activity tags and baggage HOT 5
- Collision with Microsoft.Extensions.Telemetry HOT 1
- `ISupportExternalScope` enrichment HOT 4
- String Quoting - global disable switch HOT 8
- Serilog ignores dotnet logging configuration HOT 2
- Update README to replace UseSerilog with AddSerilog HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from serilog-extensions-logging.